diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index bc893c979..7c454abf7 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,5 +13,5 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:8a5d3f6a2e43ed8293f34e06a2f56931d1e88a2694c3bb11b15df4eb256ad163 -# created: 2022-04-06T10:30:21.687684602Z + digest: sha256:00c9d764fd1cd56265f12a5ef4b99a0c9e87cf261018099141e2ca5158890416 +# created: 2022-04-20T23:42:53.970438194Z diff --git a/CHANGELOG.md b/CHANGELOG.md index 403472c37..b22459424 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [1.3.0](https://github.com/googleapis/python-compute/compare/v1.2.0...v1.3.0) (2022-04-21) + + +### Features + +* add new methods for long running operations ([526fb10](https://github.com/googleapis/python-compute/commit/526fb1021cfa25aa34ee93fcca122fb8798c8359)) + + +### Bug Fixes + +* **compute:** remove proto3_optional from parent_id ([#260](https://github.com/googleapis/python-compute/issues/260)) ([526fb10](https://github.com/googleapis/python-compute/commit/526fb1021cfa25aa34ee93fcca122fb8798c8359)) +* **compute:** replace missing REQUIRED for parent_id ([526fb10](https://github.com/googleapis/python-compute/commit/526fb1021cfa25aa34ee93fcca122fb8798c8359)) +* **deps:** require google-api-core>=2.7.0 ([526fb10](https://github.com/googleapis/python-compute/commit/526fb1021cfa25aa34ee93fcca122fb8798c8359)) +* revert proto3_optional, required removal on parent_id ([#714](https://github.com/googleapis/python-compute/issues/714)) ([#265](https://github.com/googleapis/python-compute/issues/265)) ([ae1aeac](https://github.com/googleapis/python-compute/commit/ae1aeac4290d7a0e5961751bb00e03e08ade699e)) + + +### Documentation + +* **samples:** Add samples for suspending/resuming an instance ([#259](https://github.com/googleapis/python-compute/issues/259)) ([685d909](https://github.com/googleapis/python-compute/commit/685d909ebd015ccb5277f1ad2f3e9d142d532a13)) +* **samples:** Migrate samples to use new type of operations ([#264](https://github.com/googleapis/python-compute/issues/264)) ([767d7c8](https://github.com/googleapis/python-compute/commit/767d7c803453bc329499a12f92c20693134e4d91)) + ## [1.2.0](https://github.com/googleapis/python-compute/compare/v1.1.0...v1.2.0) (2022-04-07) diff --git a/google/cloud/compute_v1/services/accelerator_types/client.py b/google/cloud/compute_v1/services/accelerator_types/client.py index 15497538b..53f0e6201 100644 --- a/google/cloud/compute_v1/services/accelerator_types/client.py +++ b/google/cloud/compute_v1/services/accelerator_types/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/accelerator_types/transports/base.py b/google/cloud/compute_v1/services/accelerator_types/transports/base.py index 7fd9ea6f9..0bd9a173b 100644 --- a/google/cloud/compute_v1/services/accelerator_types/transports/base.py +++ b/google/cloud/compute_v1/services/accelerator_types/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -180,5 +181,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("AcceleratorTypesTransport",) diff --git a/google/cloud/compute_v1/services/accelerator_types/transports/rest.py b/google/cloud/compute_v1/services/accelerator_types/transports/rest.py index c20ddb62c..93f7df6b8 100644 --- a/google/cloud/compute_v1/services/accelerator_types/transports/rest.py +++ b/google/cloud/compute_v1/services/accelerator_types/transports/rest.py @@ -583,6 +583,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/addresses/client.py b/google/cloud/compute_v1/services/addresses/client.py index 946732c02..a9d987276 100644 --- a/google/cloud/compute_v1/services/addresses/client.py +++ b/google/cloud/compute_v1/services/addresses/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.addresses import pagers from google.cloud.compute_v1.types import compute from .transports.base import AddressesTransport, DEFAULT_CLIENT_INFO @@ -521,22 +524,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -579,6 +569,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteAddressRequest, dict] = None, + *, + project: str = None, + region: str = None, + address: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified address resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteAddressRequest, dict]): + The request object. A request message for + Addresses.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + address (str): + Name of the address resource to + delete. + + This corresponds to the ``address`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, address]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteAddressRequest): + request = compute.DeleteAddressRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if address is not None: + request.address = address + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetAddressRequest, dict] = None, @@ -711,22 +813,95 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, address_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertAddressRequest): + request = compute.InsertAddressRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if address_resource is not None: + request.address_resource = address_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertAddressRequest, dict] = None, + *, + project: str = None, + region: str = None, + address_resource: compute.Address = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an address resource in the specified project + by using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertAddressRequest, dict]): + The request object. A request message for + Addresses.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + address_resource (google.cloud.compute_v1.types.Address): + The body resource for this request + This corresponds to the ``address_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -766,6 +941,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/addresses/transports/base.py b/google/cloud/compute_v1/services/addresses/transports/base.py index 9aaad770a..5ea827e6b 100644 --- a/google/cloud/compute_v1/services/addresses/transports/base.py +++ b/google/cloud/compute_v1/services/addresses/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -203,5 +206,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("AddressesTransport",) diff --git a/google/cloud/compute_v1/services/addresses/transports/rest.py b/google/cloud/compute_v1/services/addresses/transports/rest.py index 9335962c0..ed9dc2d0b 100644 --- a/google/cloud/compute_v1/services/addresses/transports/rest.py +++ b/google/cloud/compute_v1/services/addresses/transports/rest.py @@ -845,6 +845,10 @@ def list(self) -> Callable[[compute.ListAddressesRequest], compute.AddressList]: # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/autoscalers/client.py b/google/cloud/compute_v1/services/autoscalers/client.py index 704c71887..694282eb8 100644 --- a/google/cloud/compute_v1/services/autoscalers/client.py +++ b/google/cloud/compute_v1/services/autoscalers/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.autoscalers import pagers from google.cloud.compute_v1.types import compute from .transports.base import AutoscalersTransport, DEFAULT_CLIENT_INFO @@ -519,22 +522,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -577,6 +567,116 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteAutoscalerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + autoscaler: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified autoscaler. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteAutoscalerRequest, dict]): + The request object. A request message for + Autoscalers.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler (str): + Name of the autoscaler to delete. + This corresponds to the ``autoscaler`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, autoscaler]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteAutoscalerRequest): + request = compute.DeleteAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if autoscaler is not None: + request.autoscaler = autoscaler + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetAutoscalerRequest, dict] = None, @@ -713,22 +813,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -771,6 +858,117 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertAutoscalerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + autoscaler_resource: compute.Autoscaler = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an autoscaler in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertAutoscalerRequest, dict]): + The request object. A request message for + Autoscalers.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler_resource (google.cloud.compute_v1.types.Autoscaler): + The body resource for this request + This corresponds to the ``autoscaler_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, autoscaler_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertAutoscalerRequest): + request = compute.InsertAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if autoscaler_resource is not None: + request.autoscaler_resource = autoscaler_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListAutoscalersRequest, dict] = None, @@ -904,22 +1102,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -962,6 +1147,119 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchAutoscalerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + autoscaler_resource: compute.Autoscaler = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates an autoscaler in the specified project using + the data included in the request. This method supports + PATCH semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchAutoscalerRequest, dict]): + The request object. A request message for + Autoscalers.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler_resource (google.cloud.compute_v1.types.Autoscaler): + The body resource for this request + This corresponds to the ``autoscaler_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, autoscaler_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchAutoscalerRequest): + request = compute.PatchAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if autoscaler_resource is not None: + request.autoscaler_resource = autoscaler_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateAutoscalerRequest, dict] = None, @@ -1003,22 +1301,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1061,6 +1346,117 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateAutoscalerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + autoscaler_resource: compute.Autoscaler = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates an autoscaler in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateAutoscalerRequest, dict]): + The request object. A request message for + Autoscalers.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler_resource (google.cloud.compute_v1.types.Autoscaler): + The body resource for this request + This corresponds to the ``autoscaler_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, autoscaler_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateAutoscalerRequest): + request = compute.UpdateAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if autoscaler_resource is not None: + request.autoscaler_resource = autoscaler_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/autoscalers/transports/base.py b/google/cloud/compute_v1/services/autoscalers/transports/base.py index 0ff248d1f..f0c98e3b0 100644 --- a/google/cloud/compute_v1/services/autoscalers/transports/base.py +++ b/google/cloud/compute_v1/services/autoscalers/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -235,5 +238,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("AutoscalersTransport",) diff --git a/google/cloud/compute_v1/services/autoscalers/transports/rest.py b/google/cloud/compute_v1/services/autoscalers/transports/rest.py index 34e6d96fe..abf6c63cc 100644 --- a/google/cloud/compute_v1/services/autoscalers/transports/rest.py +++ b/google/cloud/compute_v1/services/autoscalers/transports/rest.py @@ -1162,6 +1162,10 @@ def update(self) -> Callable[[compute.UpdateAutoscalerRequest], compute.Operatio # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/backend_buckets/client.py b/google/cloud/compute_v1/services/backend_buckets/client.py index 00bad1169..8ca743195 100644 --- a/google/cloud/compute_v1/services/backend_buckets/client.py +++ b/google/cloud/compute_v1/services/backend_buckets/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.backend_buckets import pagers from google.cloud.compute_v1.types import compute from .transports.base import BackendBucketsTransport, DEFAULT_CLIENT_INFO @@ -447,22 +450,9 @@ def add_signed_url_key_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -505,6 +495,120 @@ def add_signed_url_key_unary( # Done; return the response. return response + def add_signed_url_key( + self, + request: Union[compute.AddSignedUrlKeyBackendBucketRequest, dict] = None, + *, + project: str = None, + backend_bucket: str = None, + signed_url_key_resource: compute.SignedUrlKey = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds a key for validating requests with signed URLs + for this backend bucket. + + Args: + request (Union[google.cloud.compute_v1.types.AddSignedUrlKeyBackendBucketRequest, dict]): + The request object. A request message for + BackendBuckets.AddSignedUrlKey. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_bucket (str): + Name of the BackendBucket resource to + which the Signed URL Key should be + added. The name should conform to + RFC1035. + + This corresponds to the ``backend_bucket`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + signed_url_key_resource (google.cloud.compute_v1.types.SignedUrlKey): + The body resource for this request + This corresponds to the ``signed_url_key_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_bucket, signed_url_key_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddSignedUrlKeyBackendBucketRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddSignedUrlKeyBackendBucketRequest): + request = compute.AddSignedUrlKeyBackendBucketRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_bucket is not None: + request.backend_bucket = backend_bucket + if signed_url_key_resource is not None: + request.signed_url_key_resource = signed_url_key_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_signed_url_key] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def delete_unary( self, request: Union[compute.DeleteBackendBucketRequest, dict] = None, @@ -541,22 +645,88 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_bucket]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteBackendBucketRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteBackendBucketRequest): + request = compute.DeleteBackendBucketRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_bucket is not None: + request.backend_bucket = backend_bucket + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteBackendBucketRequest, dict] = None, + *, + project: str = None, + backend_bucket: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified BackendBucket resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteBackendBucketRequest, dict]): + The request object. A request message for + BackendBuckets.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_bucket (str): + Name of the BackendBucket resource to + delete. + + This corresponds to the ``backend_bucket`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -594,6 +764,30 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -644,22 +838,101 @@ def delete_signed_url_key_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_bucket, key_name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteSignedUrlKeyBackendBucketRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteSignedUrlKeyBackendBucketRequest): + request = compute.DeleteSignedUrlKeyBackendBucketRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_bucket is not None: + request.backend_bucket = backend_bucket + if key_name is not None: + request.key_name = key_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_signed_url_key] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete_signed_url_key( + self, + request: Union[compute.DeleteSignedUrlKeyBackendBucketRequest, dict] = None, + *, + project: str = None, + backend_bucket: str = None, + key_name: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes a key for validating requests with signed + URLs for this backend bucket. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteSignedUrlKeyBackendBucketRequest, dict]): + The request object. A request message for + BackendBuckets.DeleteSignedUrlKey. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_bucket (str): + Name of the BackendBucket resource to + which the Signed URL Key should be + added. The name should conform to + RFC1035. + + This corresponds to the ``backend_bucket`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + key_name (str): + The name of the Signed URL Key to + delete. + + This corresponds to the ``key_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -689,7 +962,368 @@ def delete_signed_url_key_unary( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_signed_url_key] + rpc = self._transport._wrapped_methods[self._transport.delete_signed_url_key] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetBackendBucketRequest, dict] = None, + *, + project: str = None, + backend_bucket: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.BackendBucket: + r"""Returns the specified BackendBucket resource. Gets a + list of available backend buckets by making a list() + request. + + Args: + request (Union[google.cloud.compute_v1.types.GetBackendBucketRequest, dict]): + The request object. A request message for + BackendBuckets.Get. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_bucket (str): + Name of the BackendBucket resource to + return. + + This corresponds to the ``backend_bucket`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.BackendBucket: + Represents a Cloud Storage Bucket + resource. This Cloud Storage bucket + resource is referenced by a URL map of a + load balancer. For more information, + read Backend Buckets. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_bucket]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetBackendBucketRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetBackendBucketRequest): + request = compute.GetBackendBucketRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_bucket is not None: + request.backend_bucket = backend_bucket + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertBackendBucketRequest, dict] = None, + *, + project: str = None, + backend_bucket_resource: compute.BackendBucket = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a BackendBucket resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertBackendBucketRequest, dict]): + The request object. A request message for + BackendBuckets.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_bucket_resource (google.cloud.compute_v1.types.BackendBucket): + The body resource for this request + This corresponds to the ``backend_bucket_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_bucket_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertBackendBucketRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertBackendBucketRequest): + request = compute.InsertBackendBucketRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_bucket_resource is not None: + request.backend_bucket_resource = backend_bucket_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertBackendBucketRequest, dict] = None, + *, + project: str = None, + backend_bucket_resource: compute.BackendBucket = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a BackendBucket resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertBackendBucketRequest, dict]): + The request object. A request message for + BackendBuckets.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_bucket_resource (google.cloud.compute_v1.types.BackendBucket): + The body resource for this request + This corresponds to the ``backend_bucket_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_bucket_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertBackendBucketRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertBackendBucketRequest): + request = compute.InsertBackendBucketRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_bucket_resource is not None: + request.backend_bucket_resource = backend_bucket_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListBackendBucketsRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves the list of BackendBucket resources + available to the specified project. + + Args: + request (Union[google.cloud.compute_v1.types.ListBackendBucketsRequest, dict]): + The request object. A request message for + BackendBuckets.List. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.backend_buckets.pagers.ListPager: + Contains a list of BackendBucket + resources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListBackendBucketsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListBackendBucketsRequest): + request = compute.ListBackendBucketsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] # Send the request. response = rpc( @@ -699,27 +1333,38 @@ def delete_signed_url_key_unary( metadata=metadata, ) + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + # Done; return the response. return response - def get( + def patch_unary( self, - request: Union[compute.GetBackendBucketRequest, dict] = None, + request: Union[compute.PatchBackendBucketRequest, dict] = None, *, project: str = None, backend_bucket: str = None, + backend_bucket_resource: compute.BackendBucket = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.BackendBucket: - r"""Returns the specified BackendBucket resource. Gets a - list of available backend buckets by making a list() - request. + ) -> compute.Operation: + r"""Updates the specified BackendBucket resource with the + data included in the request. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. Args: - request (Union[google.cloud.compute_v1.types.GetBackendBucketRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchBackendBucketRequest, dict]): The request object. A request message for - BackendBuckets.Get. See the method description for + BackendBuckets.Patch. See the method description for details. project (str): Project ID for this request. @@ -728,11 +1373,16 @@ def get( should not be set. backend_bucket (str): Name of the BackendBucket resource to - return. + patch. This corresponds to the ``backend_bucket`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + backend_bucket_resource (google.cloud.compute_v1.types.BackendBucket): + The body resource for this request + This corresponds to the ``backend_bucket_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -740,18 +1390,15 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.BackendBucket: - Represents a Cloud Storage Bucket - resource. This Cloud Storage bucket - resource is referenced by a URL map of a - load balancer. For more information, - read Backend Buckets. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_bucket]) + has_flattened_params = any([project, backend_bucket, backend_bucket_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -759,21 +1406,23 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetBackendBucketRequest. + # in a compute.PatchBackendBucketRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetBackendBucketRequest): - request = compute.GetBackendBucketRequest(request) + if not isinstance(request, compute.PatchBackendBucketRequest): + request = compute.PatchBackendBucketRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_bucket is not None: request.backend_bucket = backend_bucket + if backend_bucket_resource is not None: + request.backend_bucket_resource = backend_bucket_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -786,29 +1435,39 @@ def get( # Done; return the response. return response - def insert_unary( + def patch( self, - request: Union[compute.InsertBackendBucketRequest, dict] = None, + request: Union[compute.PatchBackendBucketRequest, dict] = None, *, project: str = None, + backend_bucket: str = None, backend_bucket_resource: compute.BackendBucket = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates a BackendBucket resource in the specified - project using the data included in the request. + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified BackendBucket resource with the + data included in the request. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. Args: - request (Union[google.cloud.compute_v1.types.InsertBackendBucketRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchBackendBucketRequest, dict]): The request object. A request message for - BackendBuckets.Insert. See the method description for + BackendBuckets.Patch. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + backend_bucket (str): + Name of the BackendBucket resource to + patch. + + This corresponds to the ``backend_bucket`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. backend_bucket_resource (google.cloud.compute_v1.types.BackendBucket): The body resource for this request This corresponds to the ``backend_bucket_resource`` field @@ -821,28 +1480,15 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_bucket_resource]) + has_flattened_params = any([project, backend_bucket, backend_bucket_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -850,21 +1496,23 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertBackendBucketRequest. + # in a compute.PatchBackendBucketRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertBackendBucketRequest): - request = compute.InsertBackendBucketRequest(request) + if not isinstance(request, compute.PatchBackendBucketRequest): + request = compute.PatchBackendBucketRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if backend_bucket is not None: + request.backend_bucket = backend_bucket if backend_bucket_resource is not None: request.backend_bucket_resource = backend_bucket_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -874,31 +1522,70 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def list( + def set_edge_security_policy_unary( self, - request: Union[compute.ListBackendBucketsRequest, dict] = None, + request: Union[compute.SetEdgeSecurityPolicyBackendBucketRequest, dict] = None, *, project: str = None, + backend_bucket: str = None, + security_policy_reference_resource: compute.SecurityPolicyReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves the list of BackendBucket resources - available to the specified project. + ) -> compute.Operation: + r"""Sets the edge security policy for the specified + backend bucket. Args: - request (Union[google.cloud.compute_v1.types.ListBackendBucketsRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetEdgeSecurityPolicyBackendBucketRequest, dict]): The request object. A request message for - BackendBuckets.List. See the method description for - details. + BackendBuckets.SetEdgeSecurityPolicy. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + backend_bucket (str): + Name of the BackendService resource + to which the security policy should be + set. The name should conform to RFC1035. + + This corresponds to the ``backend_bucket`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): + The body resource for this request + This corresponds to the ``security_policy_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -906,18 +1593,17 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.backend_buckets.pagers.ListPager: - Contains a list of BackendBucket - resources. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project]) + has_flattened_params = any( + [project, backend_bucket, security_policy_reference_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -925,19 +1611,25 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListBackendBucketsRequest. + # in a compute.SetEdgeSecurityPolicyBackendBucketRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListBackendBucketsRequest): - request = compute.ListBackendBucketsRequest(request) + if not isinstance(request, compute.SetEdgeSecurityPolicyBackendBucketRequest): + request = compute.SetEdgeSecurityPolicyBackendBucketRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if backend_bucket is not None: + request.backend_bucket = backend_bucket + if security_policy_reference_resource is not None: + request.security_policy_reference_resource = ( + security_policy_reference_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.set_edge_security_policy] # Send the request. response = rpc( @@ -947,54 +1639,44 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def patch_unary( + def set_edge_security_policy( self, - request: Union[compute.PatchBackendBucketRequest, dict] = None, + request: Union[compute.SetEdgeSecurityPolicyBackendBucketRequest, dict] = None, *, project: str = None, backend_bucket: str = None, - backend_bucket_resource: compute.BackendBucket = None, + security_policy_reference_resource: compute.SecurityPolicyReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Updates the specified BackendBucket resource with the - data included in the request. This method supports PATCH - semantics and uses the JSON merge patch format and - processing rules. + ) -> extended_operation.ExtendedOperation: + r"""Sets the edge security policy for the specified + backend bucket. Args: - request (Union[google.cloud.compute_v1.types.PatchBackendBucketRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetEdgeSecurityPolicyBackendBucketRequest, dict]): The request object. A request message for - BackendBuckets.Patch. See the method description for - details. + BackendBuckets.SetEdgeSecurityPolicy. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. backend_bucket (str): - Name of the BackendBucket resource to - patch. + Name of the BackendService resource + to which the security policy should be + set. The name should conform to RFC1035. This corresponds to the ``backend_bucket`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - backend_bucket_resource (google.cloud.compute_v1.types.BackendBucket): + security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): The body resource for this request - This corresponds to the ``backend_bucket_resource`` field + This corresponds to the ``security_policy_reference_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1004,28 +1686,17 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_bucket, backend_bucket_resource]) + has_flattened_params = any( + [project, backend_bucket, security_policy_reference_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1033,23 +1704,25 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchBackendBucketRequest. + # in a compute.SetEdgeSecurityPolicyBackendBucketRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchBackendBucketRequest): - request = compute.PatchBackendBucketRequest(request) + if not isinstance(request, compute.SetEdgeSecurityPolicyBackendBucketRequest): + request = compute.SetEdgeSecurityPolicyBackendBucketRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_bucket is not None: request.backend_bucket = backend_bucket - if backend_bucket_resource is not None: - request.backend_bucket_resource = backend_bucket_resource + if security_policy_reference_resource is not None: + request.security_policy_reference_resource = ( + security_policy_reference_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.set_edge_security_policy] # Send the request. response = rpc( @@ -1059,44 +1732,67 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_edge_security_policy_unary( + def update_unary( self, - request: Union[compute.SetEdgeSecurityPolicyBackendBucketRequest, dict] = None, + request: Union[compute.UpdateBackendBucketRequest, dict] = None, *, project: str = None, backend_bucket: str = None, - security_policy_reference_resource: compute.SecurityPolicyReference = None, + backend_bucket_resource: compute.BackendBucket = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets the edge security policy for the specified - backend bucket. + r"""Updates the specified BackendBucket resource with the + data included in the request. Args: - request (Union[google.cloud.compute_v1.types.SetEdgeSecurityPolicyBackendBucketRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateBackendBucketRequest, dict]): The request object. A request message for - BackendBuckets.SetEdgeSecurityPolicy. See the method - description for details. + BackendBuckets.Update. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. backend_bucket (str): - Name of the BackendService resource - to which the security policy should be - set. The name should conform to RFC1035. + Name of the BackendBucket resource to + update. This corresponds to the ``backend_bucket`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): + backend_bucket_resource (google.cloud.compute_v1.types.BackendBucket): The body resource for this request - This corresponds to the ``security_policy_reference_resource`` field + This corresponds to the ``backend_bucket_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1106,30 +1802,15 @@ def set_edge_security_policy_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, backend_bucket, security_policy_reference_resource] - ) + has_flattened_params = any([project, backend_bucket, backend_bucket_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1137,25 +1818,23 @@ def set_edge_security_policy_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetEdgeSecurityPolicyBackendBucketRequest. + # in a compute.UpdateBackendBucketRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetEdgeSecurityPolicyBackendBucketRequest): - request = compute.SetEdgeSecurityPolicyBackendBucketRequest(request) + if not isinstance(request, compute.UpdateBackendBucketRequest): + request = compute.UpdateBackendBucketRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_bucket is not None: request.backend_bucket = backend_bucket - if security_policy_reference_resource is not None: - request.security_policy_reference_resource = ( - security_policy_reference_resource - ) + if backend_bucket_resource is not None: + request.backend_bucket_resource = backend_bucket_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_edge_security_policy] + rpc = self._transport._wrapped_methods[self._transport.update] # Send the request. response = rpc( @@ -1168,7 +1847,7 @@ def set_edge_security_policy_unary( # Done; return the response. return response - def update_unary( + def update( self, request: Union[compute.UpdateBackendBucketRequest, dict] = None, *, @@ -1178,7 +1857,7 @@ def update_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Updates the specified BackendBucket resource with the data included in the request. @@ -1211,22 +1890,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1266,6 +1932,30 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/backend_buckets/transports/base.py b/google/cloud/compute_v1/services/backend_buckets/transports/base.py index 6740ea3e9..da8fd23b0 100644 --- a/google/cloud/compute_v1/services/backend_buckets/transports/base.py +++ b/google/cloud/compute_v1/services/backend_buckets/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -260,5 +263,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("BackendBucketsTransport",) diff --git a/google/cloud/compute_v1/services/backend_buckets/transports/rest.py b/google/cloud/compute_v1/services/backend_buckets/transports/rest.py index a45c05b44..c2fb5d899 100644 --- a/google/cloud/compute_v1/services/backend_buckets/transports/rest.py +++ b/google/cloud/compute_v1/services/backend_buckets/transports/rest.py @@ -1523,6 +1523,10 @@ def update( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/backend_services/client.py b/google/cloud/compute_v1/services/backend_services/client.py index d4d40b2b6..098415104 100644 --- a/google/cloud/compute_v1/services/backend_services/client.py +++ b/google/cloud/compute_v1/services/backend_services/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.backend_services import pagers from google.cloud.compute_v1.types import compute from .transports.base import BackendServicesTransport, DEFAULT_CLIENT_INFO @@ -447,22 +450,99 @@ def add_signed_url_key_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_service, signed_url_key_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddSignedUrlKeyBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddSignedUrlKeyBackendServiceRequest): + request = compute.AddSignedUrlKeyBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service is not None: + request.backend_service = backend_service + if signed_url_key_resource is not None: + request.signed_url_key_resource = signed_url_key_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_signed_url_key] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def add_signed_url_key( + self, + request: Union[compute.AddSignedUrlKeyBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service: str = None, + signed_url_key_resource: compute.SignedUrlKey = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds a key for validating requests with signed URLs + for this backend service. + + Args: + request (Union[google.cloud.compute_v1.types.AddSignedUrlKeyBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.AddSignedUrlKey. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to which the Signed URL Key should be + added. The name should conform to + RFC1035. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + signed_url_key_resource (google.cloud.compute_v1.types.SignedUrlKey): + The body resource for this request + This corresponds to the ``signed_url_key_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -502,6 +582,30 @@ def add_signed_url_key_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -625,22 +729,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -681,25 +772,23 @@ def delete_unary( # Done; return the response. return response - def delete_signed_url_key_unary( + def delete( self, - request: Union[compute.DeleteSignedUrlKeyBackendServiceRequest, dict] = None, + request: Union[compute.DeleteBackendServiceRequest, dict] = None, *, project: str = None, backend_service: str = None, - key_name: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes a key for validating requests with signed - URLs for this backend service. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified BackendService resource. Args: - request (Union[google.cloud.compute_v1.types.DeleteSignedUrlKeyBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteBackendServiceRequest, dict]): The request object. A request message for - BackendServices.DeleteSignedUrlKey. See the method - description for details. + BackendServices.Delete. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -707,20 +796,11 @@ def delete_signed_url_key_unary( should not be set. backend_service (str): Name of the BackendService resource - to which the Signed URL Key should be - added. The name should conform to - RFC1035. + to delete. This corresponds to the ``backend_service`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - key_name (str): - The name of the Signed URL Key to - delete. - - This corresponds to the ``key_name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -728,28 +808,15 @@ def delete_signed_url_key_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_service, key_name]) + has_flattened_params = any([project, backend_service]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -757,23 +824,21 @@ def delete_signed_url_key_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteSignedUrlKeyBackendServiceRequest. + # in a compute.DeleteBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteSignedUrlKeyBackendServiceRequest): - request = compute.DeleteSignedUrlKeyBackendServiceRequest(request) + if not isinstance(request, compute.DeleteBackendServiceRequest): + request = compute.DeleteBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_service is not None: request.backend_service = backend_service - if key_name is not None: - request.key_name = key_name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_signed_url_key] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -783,27 +848,52 @@ def delete_signed_url_key_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get( + def delete_signed_url_key_unary( self, - request: Union[compute.GetBackendServiceRequest, dict] = None, + request: Union[compute.DeleteSignedUrlKeyBackendServiceRequest, dict] = None, *, project: str = None, backend_service: str = None, + key_name: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.BackendService: - r"""Returns the specified BackendService resource. Gets a - list of available backend services. + ) -> compute.Operation: + r"""Deletes a key for validating requests with signed + URLs for this backend service. Args: - request (Union[google.cloud.compute_v1.types.GetBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteSignedUrlKeyBackendServiceRequest, dict]): The request object. A request message for - BackendServices.Get. See the method description for - details. + BackendServices.DeleteSignedUrlKey. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -811,11 +901,20 @@ def get( should not be set. backend_service (str): Name of the BackendService resource - to return. + to which the Signed URL Key should be + added. The name should conform to + RFC1035. This corresponds to the ``backend_service`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + key_name (str): + The name of the Signed URL Key to + delete. + + This corresponds to the ``key_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -823,28 +922,15 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.BackendService: - Represents a Backend Service resource. A backend service - defines how Google Cloud load balancers distribute - traffic. The backend service configuration contains a - set of values, such as the protocol used to connect to - backends, various distribution and session settings, - health checks, and timeouts. These settings provide - fine-grained control over how your load balancer - behaves. Most of the settings have default values that - allow for easy configuration if you need to get started - quickly. Backend services in Google Compute Engine can - be either regionally or globally scoped. \* - [Global](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) - \* - [Regional](https://cloud.google.com/compute/docs/reference/rest/v1/regionBackendServices) - For more information, see Backend Services. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_service]) + has_flattened_params = any([project, backend_service, key_name]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -852,21 +938,23 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetBackendServiceRequest. + # in a compute.DeleteSignedUrlKeyBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetBackendServiceRequest): - request = compute.GetBackendServiceRequest(request) + if not isinstance(request, compute.DeleteSignedUrlKeyBackendServiceRequest): + request = compute.DeleteSignedUrlKeyBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_service is not None: request.backend_service = backend_service + if key_name is not None: + request.key_name = key_name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.delete_signed_url_key] # Send the request. response = rpc( @@ -879,41 +967,44 @@ def get( # Done; return the response. return response - def get_health( + def delete_signed_url_key( self, - request: Union[compute.GetHealthBackendServiceRequest, dict] = None, + request: Union[compute.DeleteSignedUrlKeyBackendServiceRequest, dict] = None, *, project: str = None, backend_service: str = None, - resource_group_reference_resource: compute.ResourceGroupReference = None, + key_name: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.BackendServiceGroupHealth: - r"""Gets the most recent health check results for this - BackendService. Example request body: { "group": - "/zones/us-east1-b/instanceGroups/lb-backend-example" } + ) -> extended_operation.ExtendedOperation: + r"""Deletes a key for validating requests with signed + URLs for this backend service. Args: - request (Union[google.cloud.compute_v1.types.GetHealthBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteSignedUrlKeyBackendServiceRequest, dict]): The request object. A request message for - BackendServices.GetHealth. See the method description - for details. + BackendServices.DeleteSignedUrlKey. See the method + description for details. project (str): - + Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. backend_service (str): Name of the BackendService resource - to which the queried instance belongs. + to which the Signed URL Key should be + added. The name should conform to + RFC1035. This corresponds to the ``backend_service`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource_group_reference_resource (google.cloud.compute_v1.types.ResourceGroupReference): - The body resource for this request - This corresponds to the ``resource_group_reference_resource`` field + key_name (str): + The name of the Signed URL Key to + delete. + + This corresponds to the ``key_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -923,15 +1014,15 @@ def get_health( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.BackendServiceGroupHealth: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, backend_service, resource_group_reference_resource] - ) + has_flattened_params = any([project, backend_service, key_name]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -939,25 +1030,677 @@ def get_health( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetHealthBackendServiceRequest. + # in a compute.DeleteSignedUrlKeyBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetHealthBackendServiceRequest): - request = compute.GetHealthBackendServiceRequest(request) + if not isinstance(request, compute.DeleteSignedUrlKeyBackendServiceRequest): + request = compute.DeleteSignedUrlKeyBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_service is not None: request.backend_service = backend_service - if resource_group_reference_resource is not None: - request.resource_group_reference_resource = ( - resource_group_reference_resource - ) + if key_name is not None: + request.key_name = key_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_signed_url_key] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.BackendService: + r"""Returns the specified BackendService resource. Gets a + list of available backend services. + + Args: + request (Union[google.cloud.compute_v1.types.GetBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.Get. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to return. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.BackendService: + Represents a Backend Service resource. A backend service + defines how Google Cloud load balancers distribute + traffic. The backend service configuration contains a + set of values, such as the protocol used to connect to + backends, various distribution and session settings, + health checks, and timeouts. These settings provide + fine-grained control over how your load balancer + behaves. Most of the settings have default values that + allow for easy configuration if you need to get started + quickly. Backend services in Google Compute Engine can + be either regionally or globally scoped. \* + [Global](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) + \* + [Regional](https://cloud.google.com/compute/docs/reference/rest/v1/regionBackendServices) + For more information, see Backend Services. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_service]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetBackendServiceRequest): + request = compute.GetBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service is not None: + request.backend_service = backend_service + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_health( + self, + request: Union[compute.GetHealthBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service: str = None, + resource_group_reference_resource: compute.ResourceGroupReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.BackendServiceGroupHealth: + r"""Gets the most recent health check results for this + BackendService. Example request body: { "group": + "/zones/us-east1-b/instanceGroups/lb-backend-example" } + + Args: + request (Union[google.cloud.compute_v1.types.GetHealthBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.GetHealth. See the method description + for details. + project (str): + + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to which the queried instance belongs. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource_group_reference_resource (google.cloud.compute_v1.types.ResourceGroupReference): + The body resource for this request + This corresponds to the ``resource_group_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.BackendServiceGroupHealth: + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, backend_service, resource_group_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetHealthBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetHealthBackendServiceRequest): + request = compute.GetHealthBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service is not None: + request.backend_service = backend_service + if resource_group_reference_resource is not None: + request.resource_group_reference_resource = ( + resource_group_reference_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_health] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a BackendService resource in the specified + project using the data included in the request. For more + information, see Backend services overview . + + Args: + request (Union[google.cloud.compute_v1.types.InsertBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_service_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertBackendServiceRequest): + request = compute.InsertBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a BackendService resource in the specified + project using the data included in the request. For more + information, see Backend services overview . + + Args: + request (Union[google.cloud.compute_v1.types.InsertBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_service_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertBackendServiceRequest): + request = compute.InsertBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListBackendServicesRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves the list of BackendService resources + available to the specified project. + + Args: + request (Union[google.cloud.compute_v1.types.ListBackendServicesRequest, dict]): + The request object. A request message for + BackendServices.List. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.backend_services.pagers.ListPager: + Contains a list of BackendService + resources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListBackendServicesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListBackendServicesRequest): + request = compute.ListBackendServicesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Patches the specified BackendService resource with + the data included in the request. For more information, + see Backend services overview. This method supports + PATCH semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to patch. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_service, backend_service_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchBackendServiceRequest): + request = compute.PatchBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service is not None: + request.backend_service = backend_service + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchBackendServiceRequest, dict] = None, + *, + project: str = None, + backend_service: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified BackendService resource with + the data included in the request. For more information, + see Backend services overview. This method supports + PATCH semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to patch. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, backend_service, backend_service_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchBackendServiceRequest): + request = compute.PatchBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if backend_service is not None: + request.backend_service = backend_service + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_health] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -967,36 +1710,69 @@ def get_health( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def insert_unary( + def set_edge_security_policy_unary( self, - request: Union[compute.InsertBackendServiceRequest, dict] = None, + request: Union[compute.SetEdgeSecurityPolicyBackendServiceRequest, dict] = None, *, project: str = None, - backend_service_resource: compute.BackendService = None, + backend_service: str = None, + security_policy_reference_resource: compute.SecurityPolicyReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Creates a BackendService resource in the specified - project using the data included in the request. For more - information, see Backend services overview . + r"""Sets the edge security policy for the specified + backend service. Args: - request (Union[google.cloud.compute_v1.types.InsertBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetEdgeSecurityPolicyBackendServiceRequest, dict]): The request object. A request message for - BackendServices.Insert. See the method description for - details. + BackendServices.SetEdgeSecurityPolicy. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - backend_service_resource (google.cloud.compute_v1.types.BackendService): + backend_service (str): + Name of the BackendService resource + to which the edge security policy should + be set. The name should conform to + RFC1035. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): The body resource for this request - This corresponds to the ``backend_service_resource`` field + This corresponds to the ``security_policy_reference_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1006,28 +1782,17 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_service_resource]) + has_flattened_params = any( + [project, backend_service, security_policy_reference_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1035,21 +1800,25 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertBackendServiceRequest. + # in a compute.SetEdgeSecurityPolicyBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertBackendServiceRequest): - request = compute.InsertBackendServiceRequest(request) + if not isinstance(request, compute.SetEdgeSecurityPolicyBackendServiceRequest): + request = compute.SetEdgeSecurityPolicyBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if backend_service_resource is not None: - request.backend_service_resource = backend_service_resource + if backend_service is not None: + request.backend_service = backend_service + if security_policy_reference_resource is not None: + request.security_policy_reference_resource = ( + security_policy_reference_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.set_edge_security_policy] # Send the request. response = rpc( @@ -1062,28 +1831,44 @@ def insert_unary( # Done; return the response. return response - def list( + def set_edge_security_policy( self, - request: Union[compute.ListBackendServicesRequest, dict] = None, + request: Union[compute.SetEdgeSecurityPolicyBackendServiceRequest, dict] = None, *, project: str = None, + backend_service: str = None, + security_policy_reference_resource: compute.SecurityPolicyReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves the list of BackendService resources - available to the specified project. + ) -> extended_operation.ExtendedOperation: + r"""Sets the edge security policy for the specified + backend service. Args: - request (Union[google.cloud.compute_v1.types.ListBackendServicesRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetEdgeSecurityPolicyBackendServiceRequest, dict]): The request object. A request message for - BackendServices.List. See the method description for - details. + BackendServices.SetEdgeSecurityPolicy. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + backend_service (str): + Name of the BackendService resource + to which the edge security policy should + be set. The name should conform to + RFC1035. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): + The body resource for this request + This corresponds to the ``security_policy_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1091,18 +1876,17 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.backend_services.pagers.ListPager: - Contains a list of BackendService - resources. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project]) + has_flattened_params = any( + [project, backend_service, security_policy_reference_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1110,19 +1894,25 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListBackendServicesRequest. + # in a compute.SetEdgeSecurityPolicyBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListBackendServicesRequest): - request = compute.ListBackendServicesRequest(request) + if not isinstance(request, compute.SetEdgeSecurityPolicyBackendServiceRequest): + request = compute.SetEdgeSecurityPolicyBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if backend_service is not None: + request.backend_service = backend_service + if security_policy_reference_resource is not None: + request.security_policy_reference_resource = ( + security_policy_reference_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.set_edge_security_policy] # Send the request. response = rpc( @@ -1132,40 +1922,53 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def patch_unary( + def set_security_policy_unary( self, - request: Union[compute.PatchBackendServiceRequest, dict] = None, + request: Union[compute.SetSecurityPolicyBackendServiceRequest, dict] = None, *, project: str = None, backend_service: str = None, - backend_service_resource: compute.BackendService = None, + security_policy_reference_resource: compute.SecurityPolicyReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Patches the specified BackendService resource with - the data included in the request. For more information, - see Backend services overview. This method supports - PATCH semantics and uses the JSON merge patch format and - processing rules. + r"""Sets the Google Cloud Armor security policy for the + specified backend service. For more information, see + Google Cloud Armor Overview Args: - request (Union[google.cloud.compute_v1.types.PatchBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetSecurityPolicyBackendServiceRequest, dict]): The request object. A request message for - BackendServices.Patch. See the method description for - details. + BackendServices.SetSecurityPolicy. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1173,14 +1976,15 @@ def patch_unary( should not be set. backend_service (str): Name of the BackendService resource - to patch. + to which the security policy should be + set. The name should conform to RFC1035. This corresponds to the ``backend_service`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - backend_service_resource (google.cloud.compute_v1.types.BackendService): + security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): The body resource for this request - This corresponds to the ``backend_service_resource`` field + This corresponds to the ``security_policy_reference_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1190,28 +1994,17 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, backend_service, backend_service_resource]) + has_flattened_params = any( + [project, backend_service, security_policy_reference_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1219,23 +2012,25 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchBackendServiceRequest. + # in a compute.SetSecurityPolicyBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchBackendServiceRequest): - request = compute.PatchBackendServiceRequest(request) + if not isinstance(request, compute.SetSecurityPolicyBackendServiceRequest): + request = compute.SetSecurityPolicyBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_service is not None: request.backend_service = backend_service - if backend_service_resource is not None: - request.backend_service_resource = backend_service_resource + if security_policy_reference_resource is not None: + request.security_policy_reference_resource = ( + security_policy_reference_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.set_security_policy] # Send the request. response = rpc( @@ -1248,9 +2043,9 @@ def patch_unary( # Done; return the response. return response - def set_edge_security_policy_unary( + def set_security_policy( self, - request: Union[compute.SetEdgeSecurityPolicyBackendServiceRequest, dict] = None, + request: Union[compute.SetSecurityPolicyBackendServiceRequest, dict] = None, *, project: str = None, backend_service: str = None, @@ -1258,14 +2053,15 @@ def set_edge_security_policy_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets the edge security policy for the specified - backend service. + ) -> extended_operation.ExtendedOperation: + r"""Sets the Google Cloud Armor security policy for the + specified backend service. For more information, see + Google Cloud Armor Overview Args: - request (Union[google.cloud.compute_v1.types.SetEdgeSecurityPolicyBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetSecurityPolicyBackendServiceRequest, dict]): The request object. A request message for - BackendServices.SetEdgeSecurityPolicy. See the method + BackendServices.SetSecurityPolicy. See the method description for details. project (str): Project ID for this request. @@ -1274,9 +2070,8 @@ def set_edge_security_policy_unary( should not be set. backend_service (str): Name of the BackendService resource - to which the edge security policy should - be set. The name should conform to - RFC1035. + to which the security policy should be + set. The name should conform to RFC1035. This corresponds to the ``backend_service`` field on the ``request`` instance; if ``request`` is provided, this @@ -1293,22 +2088,9 @@ def set_edge_security_policy_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1324,11 +2106,11 @@ def set_edge_security_policy_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetEdgeSecurityPolicyBackendServiceRequest. + # in a compute.SetSecurityPolicyBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetEdgeSecurityPolicyBackendServiceRequest): - request = compute.SetEdgeSecurityPolicyBackendServiceRequest(request) + if not isinstance(request, compute.SetSecurityPolicyBackendServiceRequest): + request = compute.SetSecurityPolicyBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1342,7 +2124,7 @@ def set_edge_security_policy_unary( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_edge_security_policy] + rpc = self._transport._wrapped_methods[self._transport.set_security_policy] # Send the request. response = rpc( @@ -1352,29 +2134,53 @@ def set_edge_security_policy_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_security_policy_unary( + def update_unary( self, - request: Union[compute.SetSecurityPolicyBackendServiceRequest, dict] = None, + request: Union[compute.UpdateBackendServiceRequest, dict] = None, *, project: str = None, backend_service: str = None, - security_policy_reference_resource: compute.SecurityPolicyReference = None, + backend_service_resource: compute.BackendService = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets the Google Cloud Armor security policy for the - specified backend service. For more information, see - Google Cloud Armor Overview + r"""Updates the specified BackendService resource with + the data included in the request. For more information, + see Backend services overview. Args: - request (Union[google.cloud.compute_v1.types.SetSecurityPolicyBackendServiceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateBackendServiceRequest, dict]): The request object. A request message for - BackendServices.SetSecurityPolicy. See the method - description for details. + BackendServices.Update. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1382,15 +2188,14 @@ def set_security_policy_unary( should not be set. backend_service (str): Name of the BackendService resource - to which the security policy should be - set. The name should conform to RFC1035. + to update. This corresponds to the ``backend_service`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - security_policy_reference_resource (google.cloud.compute_v1.types.SecurityPolicyReference): + backend_service_resource (google.cloud.compute_v1.types.BackendService): The body resource for this request - This corresponds to the ``security_policy_reference_resource`` field + This corresponds to the ``backend_service_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1400,30 +2205,15 @@ def set_security_policy_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, backend_service, security_policy_reference_resource] - ) + has_flattened_params = any([project, backend_service, backend_service_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1431,25 +2221,23 @@ def set_security_policy_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetSecurityPolicyBackendServiceRequest. + # in a compute.UpdateBackendServiceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetSecurityPolicyBackendServiceRequest): - request = compute.SetSecurityPolicyBackendServiceRequest(request) + if not isinstance(request, compute.UpdateBackendServiceRequest): + request = compute.UpdateBackendServiceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if backend_service is not None: request.backend_service = backend_service - if security_policy_reference_resource is not None: - request.security_policy_reference_resource = ( - security_policy_reference_resource - ) + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_security_policy] + rpc = self._transport._wrapped_methods[self._transport.update] # Send the request. response = rpc( @@ -1462,7 +2250,7 @@ def set_security_policy_unary( # Done; return the response. return response - def update_unary( + def update( self, request: Union[compute.UpdateBackendServiceRequest, dict] = None, *, @@ -1472,7 +2260,7 @@ def update_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Updates the specified BackendService resource with the data included in the request. For more information, see Backend services overview. @@ -1506,22 +2294,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1561,6 +2336,30 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/backend_services/transports/base.py b/google/cloud/compute_v1/services/backend_services/transports/base.py index c83dceae5..0136b20cc 100644 --- a/google/cloud/compute_v1/services/backend_services/transports/base.py +++ b/google/cloud/compute_v1/services/backend_services/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -308,5 +311,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("BackendServicesTransport",) diff --git a/google/cloud/compute_v1/services/backend_services/transports/rest.py b/google/cloud/compute_v1/services/backend_services/transports/rest.py index 9bc043175..ddf57782f 100644 --- a/google/cloud/compute_v1/services/backend_services/transports/rest.py +++ b/google/cloud/compute_v1/services/backend_services/transports/rest.py @@ -1984,6 +1984,10 @@ def update( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/disk_types/client.py b/google/cloud/compute_v1/services/disk_types/client.py index 3df0e6401..d7eec993e 100644 --- a/google/cloud/compute_v1/services/disk_types/client.py +++ b/google/cloud/compute_v1/services/disk_types/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/disk_types/transports/base.py b/google/cloud/compute_v1/services/disk_types/transports/base.py index b5faaa609..a72169361 100644 --- a/google/cloud/compute_v1/services/disk_types/transports/base.py +++ b/google/cloud/compute_v1/services/disk_types/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -179,5 +180,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("DiskTypesTransport",) diff --git a/google/cloud/compute_v1/services/disk_types/transports/rest.py b/google/cloud/compute_v1/services/disk_types/transports/rest.py index 298251795..6734a921a 100644 --- a/google/cloud/compute_v1/services/disk_types/transports/rest.py +++ b/google/cloud/compute_v1/services/disk_types/transports/rest.py @@ -561,6 +561,10 @@ def list(self) -> Callable[[compute.ListDiskTypesRequest], compute.DiskTypeList] # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/disks/client.py b/google/cloud/compute_v1/services/disks/client.py index 76562a4b1..2e585f517 100644 --- a/google/cloud/compute_v1/services/disks/client.py +++ b/google/cloud/compute_v1/services/disks/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.disks import pagers from google.cloud.compute_v1.types import compute from .transports.base import DisksTransport, DEFAULT_CLIENT_INFO @@ -450,22 +453,9 @@ def add_resource_policies_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -514,6 +504,132 @@ def add_resource_policies_unary( # Done; return the response. return response + def add_resource_policies( + self, + request: Union[compute.AddResourcePoliciesDiskRequest, dict] = None, + *, + project: str = None, + zone: str = None, + disk: str = None, + disks_add_resource_policies_request_resource: compute.DisksAddResourcePoliciesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds existing resource policies to a disk. You can + only add one policy which will be applied to this disk + for scheduling snapshot creation. + + Args: + request (Union[google.cloud.compute_v1.types.AddResourcePoliciesDiskRequest, dict]): + The request object. A request message for + Disks.AddResourcePolicies. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk (str): + The disk name for this request. + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disks_add_resource_policies_request_resource (google.cloud.compute_v1.types.DisksAddResourcePoliciesRequest): + The body resource for this request + This corresponds to the ``disks_add_resource_policies_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, disk, disks_add_resource_policies_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddResourcePoliciesDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddResourcePoliciesDiskRequest): + request = compute.AddResourcePoliciesDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if disk is not None: + request.disk = disk + if disks_add_resource_policies_request_resource is not None: + request.disks_add_resource_policies_request_resource = ( + disks_add_resource_policies_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_resource_policies] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def aggregated_list( self, request: Union[compute.AggregatedListDisksRequest, dict] = None, @@ -647,22 +763,9 @@ def create_snapshot_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -707,27 +810,29 @@ def create_snapshot_unary( # Done; return the response. return response - def delete_unary( + def create_snapshot( self, - request: Union[compute.DeleteDiskRequest, dict] = None, + request: Union[compute.CreateSnapshotDiskRequest, dict] = None, *, project: str = None, zone: str = None, disk: str = None, + snapshot_resource: compute.Snapshot = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes the specified persistent disk. Deleting a - disk removes its data permanently and is irreversible. - However, deleting a disk does not delete any snapshots - previously made from the disk. You must separately - delete snapshots. + ) -> extended_operation.ExtendedOperation: + r"""Creates a snapshot of a specified persistent disk. + For regular snapshot creation, consider using + snapshots.insert instead, as that method supports more + features, such as creating snapshots in a project + different from the source disk project. Args: - request (Union[google.cloud.compute_v1.types.DeleteDiskRequest, dict]): - The request object. A request message for Disks.Delete. - See the method description for details. + request (Union[google.cloud.compute_v1.types.CreateSnapshotDiskRequest, dict]): + The request object. A request message for + Disks.CreateSnapshot. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -742,11 +847,16 @@ def delete_unary( should not be set. disk (str): Name of the persistent disk to - delete. + snapshot. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + snapshot_resource (google.cloud.compute_v1.types.Snapshot): + The body resource for this request + This corresponds to the ``snapshot_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -754,28 +864,15 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, disk]) + has_flattened_params = any([project, zone, disk, snapshot_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -783,11 +880,11 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteDiskRequest. + # in a compute.CreateSnapshotDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteDiskRequest): - request = compute.DeleteDiskRequest(request) + if not isinstance(request, compute.CreateSnapshotDiskRequest): + request = compute.CreateSnapshotDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -796,10 +893,12 @@ def delete_unary( request.zone = zone if disk is not None: request.disk = disk + if snapshot_resource is not None: + request.snapshot_resource = snapshot_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.create_snapshot] # Send the request. response = rpc( @@ -809,12 +908,37 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get( + def delete_unary( self, - request: Union[compute.GetDiskRequest, dict] = None, + request: Union[compute.DeleteDiskRequest, dict] = None, *, project: str = None, zone: str = None, @@ -822,14 +946,17 @@ def get( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Disk: - r"""Returns a specified persistent disk. Gets a list of - available persistent disks by making a list() request. + ) -> compute.Operation: + r"""Deletes the specified persistent disk. Deleting a + disk removes its data permanently and is irreversible. + However, deleting a disk does not delete any snapshots + previously made from the disk. You must separately + delete snapshots. Args: - request (Union[google.cloud.compute_v1.types.GetDiskRequest, dict]): - The request object. A request message for Disks.Get. See - the method description for details. + request (Union[google.cloud.compute_v1.types.DeleteDiskRequest, dict]): + The request object. A request message for Disks.Delete. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -844,7 +971,7 @@ def get( should not be set. disk (str): Name of the persistent disk to - return. + delete. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this @@ -856,19 +983,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Disk: - Represents a Persistent Disk resource. Google Compute - Engine has two Disk resources: \* - [Zonal](/compute/docs/reference/rest/v1/disks) \* - [Regional](/compute/docs/reference/rest/v1/regionDisks) - Persistent disks are required for running your VM - instances. Create both boot and non-boot (data) - persistent disks. For more information, read Persistent - Disks. For more storage options, read Storage options. - The disks resource represents a zonal persistent disk. - For more information, read Zonal persistent disks. The - regionDisks resource represents a regional persistent - disk. For more information, read Regional resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -882,11 +999,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetDiskRequest. + # in a compute.DeleteDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetDiskRequest): - request = compute.GetDiskRequest(request) + if not isinstance(request, compute.DeleteDiskRequest): + request = compute.DeleteDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -898,7 +1015,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -911,25 +1028,27 @@ def get( # Done; return the response. return response - def get_iam_policy( + def delete( self, - request: Union[compute.GetIamPolicyDiskRequest, dict] = None, + request: Union[compute.DeleteDiskRequest, dict] = None, *, project: str = None, zone: str = None, - resource: str = None, + disk: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Gets the access control policy for a resource. May be - empty if no such policy or resource exists. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified persistent disk. Deleting a + disk removes its data permanently and is irreversible. + However, deleting a disk does not delete any snapshots + previously made from the disk. You must separately + delete snapshots. Args: - request (Union[google.cloud.compute_v1.types.GetIamPolicyDiskRequest, dict]): - The request object. A request message for - Disks.GetIamPolicy. See the method description for - details. + request (Union[google.cloud.compute_v1.types.DeleteDiskRequest, dict]): + The request object. A request message for Disks.Delete. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -942,11 +1061,11 @@ def get_iam_policy( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this - request. + disk (str): + Name of the persistent disk to + delete. - This corresponds to the ``resource`` field + This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -956,45 +1075,259 @@ def get_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, disk]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteDiskRequest): + request = compute.DeleteDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if disk is not None: + request.disk = disk + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetDiskRequest, dict] = None, + *, + project: str = None, + zone: str = None, + disk: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Disk: + r"""Returns a specified persistent disk. Gets a list of + available persistent disks by making a list() request. + + Args: + request (Union[google.cloud.compute_v1.types.GetDiskRequest, dict]): + The request object. A request message for Disks.Get. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk (str): + Name of the persistent disk to + return. + + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Disk: + Represents a Persistent Disk resource. Google Compute + Engine has two Disk resources: \* + [Zonal](/compute/docs/reference/rest/v1/disks) \* + [Regional](/compute/docs/reference/rest/v1/regionDisks) + Persistent disks are required for running your VM + instances. Create both boot and non-boot (data) + persistent disks. For more information, read Persistent + Disks. For more storage options, read Storage options. + The disks resource represents a zonal persistent disk. + For more information, read Zonal persistent disks. The + regionDisks resource represents a regional persistent + disk. For more information, read Regional resources. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, disk]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetDiskRequest): + request = compute.GetDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if disk is not None: + request.disk = disk + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyDiskRequest, dict] = None, + *, + project: str = None, + zone: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Gets the access control policy for a resource. May be + empty if no such policy or resource exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetIamPolicyDiskRequest, dict]): + The request object. A request message for + Disks.GetIamPolicy. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, see the [IAM documentation](\ https://cloud.google.com/iam/docs/). @@ -1039,29 +1372,324 @@ def get_iam_policy( # Done; return the response. return response - def insert_unary( + def insert_unary( + self, + request: Union[compute.InsertDiskRequest, dict] = None, + *, + project: str = None, + zone: str = None, + disk_resource: compute.Disk = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a persistent disk in the specified project + using the data in the request. You can create a disk + from a source (sourceImage, sourceSnapshot, or + sourceDisk) or create an empty 500 GB data disk by + omitting all properties. You can also create a disk that + is larger than the default size by specifying the sizeGb + property. + + Args: + request (Union[google.cloud.compute_v1.types.InsertDiskRequest, dict]): + The request object. A request message for Disks.Insert. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk_resource (google.cloud.compute_v1.types.Disk): + The body resource for this request + This corresponds to the ``disk_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, disk_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertDiskRequest): + request = compute.InsertDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if disk_resource is not None: + request.disk_resource = disk_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertDiskRequest, dict] = None, + *, + project: str = None, + zone: str = None, + disk_resource: compute.Disk = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a persistent disk in the specified project + using the data in the request. You can create a disk + from a source (sourceImage, sourceSnapshot, or + sourceDisk) or create an empty 500 GB data disk by + omitting all properties. You can also create a disk that + is larger than the default size by specifying the sizeGb + property. + + Args: + request (Union[google.cloud.compute_v1.types.InsertDiskRequest, dict]): + The request object. A request message for Disks.Insert. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk_resource (google.cloud.compute_v1.types.Disk): + The body resource for this request + This corresponds to the ``disk_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, disk_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertDiskRequest): + request = compute.InsertDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if disk_resource is not None: + request.disk_resource = disk_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListDisksRequest, dict] = None, + *, + project: str = None, + zone: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves a list of persistent disks contained within + the specified zone. + + Args: + request (Union[google.cloud.compute_v1.types.ListDisksRequest, dict]): + The request object. A request message for Disks.List. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.disks.pagers.ListPager: + A list of Disk resources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListDisksRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListDisksRequest): + request = compute.ListDisksRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def remove_resource_policies_unary( self, - request: Union[compute.InsertDiskRequest, dict] = None, + request: Union[compute.RemoveResourcePoliciesDiskRequest, dict] = None, *, project: str = None, zone: str = None, - disk_resource: compute.Disk = None, + disk: str = None, + disks_remove_resource_policies_request_resource: compute.DisksRemoveResourcePoliciesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Creates a persistent disk in the specified project - using the data in the request. You can create a disk - from a source (sourceImage, sourceSnapshot, or - sourceDisk) or create an empty 500 GB data disk by - omitting all properties. You can also create a disk that - is larger than the default size by specifying the sizeGb - property. + r"""Removes resource policies from a disk. Args: - request (Union[google.cloud.compute_v1.types.InsertDiskRequest, dict]): - The request object. A request message for Disks.Insert. - See the method description for details. + request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesDiskRequest, dict]): + The request object. A request message for + Disks.RemoveResourcePolicies. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1074,9 +1702,14 @@ def insert_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - disk_resource (google.cloud.compute_v1.types.Disk): + disk (str): + The disk name for this request. + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disks_remove_resource_policies_request_resource (google.cloud.compute_v1.types.DisksRemoveResourcePoliciesRequest): The body resource for this request - This corresponds to the ``disk_resource`` field + This corresponds to the ``disks_remove_resource_policies_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1086,28 +1719,17 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, disk_resource]) + has_flattened_params = any( + [project, zone, disk, disks_remove_resource_policies_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1115,23 +1737,27 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertDiskRequest. + # in a compute.RemoveResourcePoliciesDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertDiskRequest): - request = compute.InsertDiskRequest(request) + if not isinstance(request, compute.RemoveResourcePoliciesDiskRequest): + request = compute.RemoveResourcePoliciesDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if disk_resource is not None: - request.disk_resource = disk_resource + if disk is not None: + request.disk = disk + if disks_remove_resource_policies_request_resource is not None: + request.disks_remove_resource_policies_request_resource = ( + disks_remove_resource_policies_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] # Send the request. response = rpc( @@ -1144,23 +1770,25 @@ def insert_unary( # Done; return the response. return response - def list( + def remove_resource_policies( self, - request: Union[compute.ListDisksRequest, dict] = None, + request: Union[compute.RemoveResourcePoliciesDiskRequest, dict] = None, *, project: str = None, zone: str = None, + disk: str = None, + disks_remove_resource_policies_request_resource: compute.DisksRemoveResourcePoliciesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves a list of persistent disks contained within - the specified zone. + ) -> extended_operation.ExtendedOperation: + r"""Removes resource policies from a disk. Args: - request (Union[google.cloud.compute_v1.types.ListDisksRequest, dict]): - The request object. A request message for Disks.List. - See the method description for details. + request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesDiskRequest, dict]): + The request object. A request message for + Disks.RemoveResourcePolicies. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1173,6 +1801,16 @@ def list( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + disk (str): + The disk name for this request. + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disks_remove_resource_policies_request_resource (google.cloud.compute_v1.types.DisksRemoveResourcePoliciesRequest): + The body resource for this request + This corresponds to the ``disks_remove_resource_policies_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1180,17 +1818,17 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.disks.pagers.ListPager: - A list of Disk resources. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone]) + has_flattened_params = any( + [project, zone, disk, disks_remove_resource_policies_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1198,21 +1836,27 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListDisksRequest. + # in a compute.RemoveResourcePoliciesDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListDisksRequest): - request = compute.ListDisksRequest(request) + if not isinstance(request, compute.RemoveResourcePoliciesDiskRequest): + request = compute.RemoveResourcePoliciesDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone + if disk is not None: + request.disk = disk + if disks_remove_resource_policies_request_resource is not None: + request.disks_remove_resource_policies_request_resource = ( + disks_remove_resource_policies_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] # Send the request. response = rpc( @@ -1222,37 +1866,53 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def remove_resource_policies_unary( + def resize_unary( self, - request: Union[compute.RemoveResourcePoliciesDiskRequest, dict] = None, + request: Union[compute.ResizeDiskRequest, dict] = None, *, project: str = None, zone: str = None, disk: str = None, - disks_remove_resource_policies_request_resource: compute.DisksRemoveResourcePoliciesRequest = None, + disks_resize_request_resource: compute.DisksResizeRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes resource policies from a disk. + r"""Resizes the specified persistent disk. You can only + increase the size of the disk. Args: - request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesDiskRequest, dict]): - The request object. A request message for - Disks.RemoveResourcePolicies. See the method description - for details. + request (Union[google.cloud.compute_v1.types.ResizeDiskRequest, dict]): + The request object. A request message for Disks.Resize. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1266,13 +1926,13 @@ def remove_resource_policies_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. disk (str): - The disk name for this request. + The name of the persistent disk. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - disks_remove_resource_policies_request_resource (google.cloud.compute_v1.types.DisksRemoveResourcePoliciesRequest): + disks_resize_request_resource (google.cloud.compute_v1.types.DisksResizeRequest): The body resource for this request - This corresponds to the ``disks_remove_resource_policies_request_resource`` field + This corresponds to the ``disks_resize_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1282,30 +1942,15 @@ def remove_resource_policies_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, disk, disks_remove_resource_policies_request_resource] - ) + has_flattened_params = any([project, zone, disk, disks_resize_request_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1313,11 +1958,11 @@ def remove_resource_policies_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveResourcePoliciesDiskRequest. + # in a compute.ResizeDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.RemoveResourcePoliciesDiskRequest): - request = compute.RemoveResourcePoliciesDiskRequest(request) + if not isinstance(request, compute.ResizeDiskRequest): + request = compute.ResizeDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1326,14 +1971,12 @@ def remove_resource_policies_unary( request.zone = zone if disk is not None: request.disk = disk - if disks_remove_resource_policies_request_resource is not None: - request.disks_remove_resource_policies_request_resource = ( - disks_remove_resource_policies_request_resource - ) + if disks_resize_request_resource is not None: + request.disks_resize_request_resource = disks_resize_request_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] + rpc = self._transport._wrapped_methods[self._transport.resize] # Send the request. response = rpc( @@ -1346,7 +1989,7 @@ def remove_resource_policies_unary( # Done; return the response. return response - def resize_unary( + def resize( self, request: Union[compute.ResizeDiskRequest, dict] = None, *, @@ -1357,7 +2000,7 @@ def resize_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Resizes the specified persistent disk. You can only increase the size of the disk. @@ -1394,22 +2037,9 @@ def resize_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1451,6 +2081,31 @@ def resize_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1644,22 +2299,110 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, resource, zone_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsDiskRequest): + request = compute.SetLabelsDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if resource is not None: + request.resource = resource + if zone_set_labels_request_resource is not None: + request.zone_set_labels_request_resource = ( + zone_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_labels( + self, + request: Union[compute.SetLabelsDiskRequest, dict] = None, + *, + project: str = None, + zone: str = None, + resource: str = None, + zone_set_labels_request_resource: compute.ZoneSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on a disk. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsDiskRequest, dict]): + The request object. A request message for + Disks.SetLabels. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone_set_labels_request_resource (google.cloud.compute_v1.types.ZoneSetLabelsRequest): + The body resource for this request + This corresponds to the ``zone_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1705,6 +2448,31 @@ def set_labels_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/disks/transports/base.py b/google/cloud/compute_v1/services/disks/transports/base.py index 1b8efd44a..0ceedc279 100644 --- a/google/cloud/compute_v1/services/disks/transports/base.py +++ b/google/cloud/compute_v1/services/disks/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -316,5 +319,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("DisksTransport",) diff --git a/google/cloud/compute_v1/services/disks/transports/rest.py b/google/cloud/compute_v1/services/disks/transports/rest.py index ff1ffb9a1..211690675 100644 --- a/google/cloud/compute_v1/services/disks/transports/rest.py +++ b/google/cloud/compute_v1/services/disks/transports/rest.py @@ -2104,6 +2104,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/external_vpn_gateways/client.py b/google/cloud/compute_v1/services/external_vpn_gateways/client.py index 1846aafd0..0bab4691a 100644 --- a/google/cloud/compute_v1/services/external_vpn_gateways/client.py +++ b/google/cloud/compute_v1/services/external_vpn_gateways/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.external_vpn_gateways import pagers from google.cloud.compute_v1.types import compute from .transports.base import ExternalVpnGatewaysTransport, DEFAULT_CLIENT_INFO @@ -438,22 +441,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -494,6 +484,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteExternalVpnGatewayRequest, dict] = None, + *, + project: str = None, + external_vpn_gateway: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified externalVpnGateway. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteExternalVpnGatewayRequest, dict]): + The request object. A request message for + ExternalVpnGateways.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + external_vpn_gateway (str): + Name of the externalVpnGateways to + delete. + + This corresponds to the ``external_vpn_gateway`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, external_vpn_gateway]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteExternalVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteExternalVpnGatewayRequest): + request = compute.DeleteExternalVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if external_vpn_gateway is not None: + request.external_vpn_gateway = external_vpn_gateway + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetExternalVpnGatewayRequest, dict] = None, @@ -622,22 +715,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, external_vpn_gateway_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertExternalVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertExternalVpnGatewayRequest): + request = compute.InsertExternalVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if external_vpn_gateway_resource is not None: + request.external_vpn_gateway_resource = external_vpn_gateway_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertExternalVpnGatewayRequest, dict] = None, + *, + project: str = None, + external_vpn_gateway_resource: compute.ExternalVpnGateway = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a ExternalVpnGateway in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertExternalVpnGatewayRequest, dict]): + The request object. A request message for + ExternalVpnGateways.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + external_vpn_gateway_resource (google.cloud.compute_v1.types.ExternalVpnGateway): + The body resource for this request + This corresponds to the ``external_vpn_gateway_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -675,6 +833,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -804,22 +986,9 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -866,6 +1035,123 @@ def set_labels_unary( # Done; return the response. return response + def set_labels( + self, + request: Union[compute.SetLabelsExternalVpnGatewayRequest, dict] = None, + *, + project: str = None, + resource: str = None, + global_set_labels_request_resource: compute.GlobalSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on an ExternalVpnGateway. To learn + more about labels, read the Labeling Resources + documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsExternalVpnGatewayRequest, dict]): + The request object. A request message for + ExternalVpnGateways.SetLabels. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + This corresponds to the ``global_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, resource, global_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsExternalVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsExternalVpnGatewayRequest): + request = compute.SetLabelsExternalVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if resource is not None: + request.resource = resource + if global_set_labels_request_resource is not None: + request.global_set_labels_request_resource = ( + global_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def test_iam_permissions( self, request: Union[ diff --git a/google/cloud/compute_v1/services/external_vpn_gateways/transports/base.py b/google/cloud/compute_v1/services/external_vpn_gateways/transports/base.py index 6a5b7459a..fb4b92c1c 100644 --- a/google/cloud/compute_v1/services/external_vpn_gateways/transports/base.py +++ b/google/cloud/compute_v1/services/external_vpn_gateways/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -222,5 +225,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ExternalVpnGatewaysTransport",) diff --git a/google/cloud/compute_v1/services/external_vpn_gateways/transports/rest.py b/google/cloud/compute_v1/services/external_vpn_gateways/transports/rest.py index f78fb2cdf..345cd2e08 100644 --- a/google/cloud/compute_v1/services/external_vpn_gateways/transports/rest.py +++ b/google/cloud/compute_v1/services/external_vpn_gateways/transports/rest.py @@ -1058,6 +1058,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/firewall_policies/client.py b/google/cloud/compute_v1/services/firewall_policies/client.py index 0f1aa06d8..015b4899c 100644 --- a/google/cloud/compute_v1/services/firewall_policies/client.py +++ b/google/cloud/compute_v1/services/firewall_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.firewall_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import FirewallPoliciesTransport, DEFAULT_CLIENT_INFO @@ -439,22 +442,9 @@ def add_association_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -499,23 +489,24 @@ def add_association_unary( # Done; return the response. return response - def add_rule_unary( + def add_association( self, - request: Union[compute.AddRuleFirewallPolicyRequest, dict] = None, + request: Union[compute.AddAssociationFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, - firewall_policy_rule_resource: compute.FirewallPolicyRule = None, + firewall_policy_association_resource: compute.FirewallPolicyAssociation = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Inserts a rule into a firewall policy. + ) -> extended_operation.ExtendedOperation: + r"""Inserts an association for the specified firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.AddRuleFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddAssociationFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.AddRule. See the method description for - details. + FirewallPolicies.AddAssociation. See the method + description for details. firewall_policy (str): Name of the firewall policy to update. @@ -523,9 +514,9 @@ def add_rule_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + firewall_policy_association_resource (google.cloud.compute_v1.types.FirewallPolicyAssociation): The body resource for this request - This corresponds to the ``firewall_policy_rule_resource`` field + This corresponds to the ``firewall_policy_association_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -535,28 +526,17 @@ def add_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy, firewall_policy_rule_resource]) + has_flattened_params = any( + [firewall_policy, firewall_policy_association_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -564,21 +544,23 @@ def add_rule_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.AddRuleFirewallPolicyRequest. + # in a compute.AddAssociationFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.AddRuleFirewallPolicyRequest): - request = compute.AddRuleFirewallPolicyRequest(request) + if not isinstance(request, compute.AddAssociationFirewallPolicyRequest): + request = compute.AddAssociationFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_rule_resource is not None: - request.firewall_policy_rule_resource = firewall_policy_rule_resource + if firewall_policy_association_resource is not None: + request.firewall_policy_association_resource = ( + firewall_policy_association_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.add_rule] + rpc = self._transport._wrapped_methods[self._transport.add_association] # Send the request. response = rpc( @@ -588,25 +570,49 @@ def add_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def clone_rules_unary( + def add_rule_unary( self, - request: Union[compute.CloneRulesFirewallPolicyRequest, dict] = None, + request: Union[compute.AddRuleFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Copies rules to the specified firewall policy. + r"""Inserts a rule into a firewall policy. Args: - request (Union[google.cloud.compute_v1.types.CloneRulesFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddRuleFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.CloneRules. See the method description - for details. + FirewallPolicies.AddRule. See the method description for + details. firewall_policy (str): Name of the firewall policy to update. @@ -614,6 +620,11 @@ def clone_rules_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -621,28 +632,15 @@ def clone_rules_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy]) + has_flattened_params = any([firewall_policy, firewall_policy_rule_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -650,19 +648,21 @@ def clone_rules_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.CloneRulesFirewallPolicyRequest. + # in a compute.AddRuleFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.CloneRulesFirewallPolicyRequest): - request = compute.CloneRulesFirewallPolicyRequest(request) + if not isinstance(request, compute.AddRuleFirewallPolicyRequest): + request = compute.AddRuleFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.clone_rules] + rpc = self._transport._wrapped_methods[self._transport.add_rule] # Send the request. response = rpc( @@ -675,29 +675,35 @@ def clone_rules_unary( # Done; return the response. return response - def delete_unary( + def add_rule( self, - request: Union[compute.DeleteFirewallPolicyRequest, dict] = None, + request: Union[compute.AddRuleFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes the specified policy. + ) -> extended_operation.ExtendedOperation: + r"""Inserts a rule into a firewall policy. Args: - request (Union[google.cloud.compute_v1.types.DeleteFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddRuleFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.Delete. See the method description for + FirewallPolicies.AddRule. See the method description for details. firewall_policy (str): Name of the firewall policy to - delete. + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -705,28 +711,15 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy]) + has_flattened_params = any([firewall_policy, firewall_policy_rule_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -734,19 +727,21 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteFirewallPolicyRequest. + # in a compute.AddRuleFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteFirewallPolicyRequest): - request = compute.DeleteFirewallPolicyRequest(request) + if not isinstance(request, compute.AddRuleFirewallPolicyRequest): + request = compute.AddRuleFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.add_rule] # Send the request. response = rpc( @@ -756,27 +751,52 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get( + def clone_rules_unary( self, - request: Union[compute.GetFirewallPolicyRequest, dict] = None, + request: Union[compute.CloneRulesFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicy: - r"""Returns the specified firewall policy. + ) -> compute.Operation: + r"""Copies rules to the specified firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.CloneRulesFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.Get. See the method description for - details. + FirewallPolicies.CloneRules. See the method description + for details. firewall_policy (str): - Name of the firewall policy to get. + Name of the firewall policy to + update. + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -787,9 +807,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicy: - Represents a Firewall Policy - resource. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -803,11 +823,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetFirewallPolicyRequest. + # in a compute.CloneRulesFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetFirewallPolicyRequest): - request = compute.GetFirewallPolicyRequest(request) + if not isinstance(request, compute.CloneRulesFirewallPolicyRequest): + request = compute.CloneRulesFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: @@ -815,7 +835,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.clone_rules] # Send the request. response = rpc( @@ -828,25 +848,25 @@ def get( # Done; return the response. return response - def get_association( + def clone_rules( self, - request: Union[compute.GetAssociationFirewallPolicyRequest, dict] = None, + request: Union[compute.CloneRulesFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicyAssociation: - r"""Gets an association with the specified name. + ) -> extended_operation.ExtendedOperation: + r"""Copies rules to the specified firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetAssociationFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.CloneRulesFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.GetAssociation. See the method - description for details. + FirewallPolicies.CloneRules. See the method description + for details. firewall_policy (str): - Name of the firewall policy to which - the queried rule belongs. + Name of the firewall policy to + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this @@ -858,7 +878,9 @@ def get_association( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicyAssociation: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -872,11 +894,11 @@ def get_association( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetAssociationFirewallPolicyRequest. + # in a compute.CloneRulesFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetAssociationFirewallPolicyRequest): - request = compute.GetAssociationFirewallPolicyRequest(request) + if not isinstance(request, compute.CloneRulesFirewallPolicyRequest): + request = compute.CloneRulesFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: @@ -884,7 +906,7 @@ def get_association( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_association] + rpc = self._transport._wrapped_methods[self._transport.clone_rules] # Send the request. response = rpc( @@ -894,31 +916,53 @@ def get_association( metadata=metadata, ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_iam_policy( + def delete_unary( self, - request: Union[compute.GetIamPolicyFirewallPolicyRequest, dict] = None, + request: Union[compute.DeleteFirewallPolicyRequest, dict] = None, *, - resource: str = None, + firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Gets the access control policy for a resource. May be - empty if no such policy or resource exists. + ) -> compute.Operation: + r"""Deletes the specified policy. Args: - request (Union[google.cloud.compute_v1.types.GetIamPolicyFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.GetIamPolicy. See the method - description for details. - resource (str): - Name or id of the resource for this - request. + FirewallPolicies.Delete. See the method description for + details. + firewall_policy (str): + Name of the firewall policy to + delete. - This corresponds to the ``resource`` field + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -928,53 +972,15 @@ def get_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, - see the [IAM - documentation](\ https://cloud.google.com/iam/docs/). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) + has_flattened_params = any([firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -982,19 +988,19 @@ def get_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetIamPolicyFirewallPolicyRequest. + # in a compute.DeleteFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetIamPolicyFirewallPolicyRequest): - request = compute.GetIamPolicyFirewallPolicyRequest(request) + if not isinstance(request, compute.DeleteFirewallPolicyRequest): + request = compute.DeleteFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. - if resource is not None: - request.resource = resource + if firewall_policy is not None: + request.firewall_policy = firewall_policy # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1007,21 +1013,363 @@ def get_iam_policy( # Done; return the response. return response - def get_rule( + def delete( self, - request: Union[compute.GetRuleFirewallPolicyRequest, dict] = None, + request: Union[compute.DeleteFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicyRule: - r"""Gets a rule of the specified priority. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified policy. Args: - request (Union[google.cloud.compute_v1.types.GetRuleFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.GetRule. See the method description for + FirewallPolicies.Delete. See the method description for + details. + firewall_policy (str): + Name of the firewall policy to + delete. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteFirewallPolicyRequest): + request = compute.DeleteFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetFirewallPolicyRequest, dict] = None, + *, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicy: + r"""Returns the specified firewall policy. + + Args: + request (Union[google.cloud.compute_v1.types.GetFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.Get. See the method description for + details. + firewall_policy (str): + Name of the firewall policy to get. + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicy: + Represents a Firewall Policy + resource. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetFirewallPolicyRequest): + request = compute.GetFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_association( + self, + request: Union[compute.GetAssociationFirewallPolicyRequest, dict] = None, + *, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicyAssociation: + r"""Gets an association with the specified name. + + Args: + request (Union[google.cloud.compute_v1.types.GetAssociationFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.GetAssociation. See the method + description for details. + firewall_policy (str): + Name of the firewall policy to which + the queried rule belongs. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicyAssociation: + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetAssociationFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetAssociationFirewallPolicyRequest): + request = compute.GetAssociationFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_association] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyFirewallPolicyRequest, dict] = None, + *, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Gets the access control policy for a resource. May be + empty if no such policy or resource exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetIamPolicyFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.GetIamPolicy. See the method + description for details. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, + see the [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetIamPolicyFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyFirewallPolicyRequest): + request = compute.GetIamPolicyFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_rule( + self, + request: Union[compute.GetRuleFirewallPolicyRequest, dict] = None, + *, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicyRule: + r"""Gets a rule of the specified priority. + + Args: + request (Union[google.cloud.compute_v1.types.GetRuleFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.GetRule. See the method description for details. firewall_policy (str): Name of the firewall policy to which @@ -1037,17 +1385,394 @@ def get_rule( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicyRule: - Represents a rule that describes one - or more match conditions along with the - action to be taken when traffic matches - this condition (allow or deny). + google.cloud.compute_v1.types.FirewallPolicyRule: + Represents a rule that describes one + or more match conditions along with the + action to be taken when traffic matches + this condition (allow or deny). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetRuleFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRuleFirewallPolicyRequest): + request = compute.GetRuleFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_rule] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertFirewallPolicyRequest, dict] = None, + *, + parent_id: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a new policy in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.Insert. See the method description for + details. + parent_id (str): + Parent ID for this request. The ID can be either be + "folders/[FOLDER_ID]" if the parent is a folder or + "organizations/[ORGANIZATION_ID]" if the parent is an + organization. + + This corresponds to the ``parent_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent_id, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertFirewallPolicyRequest): + request = compute.InsertFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent_id is not None: + request.parent_id = parent_id + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertFirewallPolicyRequest, dict] = None, + *, + parent_id: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new policy in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.Insert. See the method description for + details. + parent_id (str): + Parent ID for this request. The ID can be either be + "folders/[FOLDER_ID]" if the parent is a folder or + "organizations/[ORGANIZATION_ID]" if the parent is an + organization. + + This corresponds to the ``parent_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent_id, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertFirewallPolicyRequest): + request = compute.InsertFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent_id is not None: + request.parent_id = parent_id + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.parent_id = request.parent_id + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListFirewallPoliciesRequest, dict] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Lists all the policies that have been configured for + the specified folder or organization. + + Args: + request (Union[google.cloud.compute_v1.types.ListFirewallPoliciesRequest, dict]): + The request object. A request message for + FirewallPolicies.List. See the method description for + details. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.firewall_policies.pagers.ListPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListFirewallPoliciesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListFirewallPoliciesRequest): + request = compute.ListFirewallPoliciesRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_associations( + self, + request: Union[compute.ListAssociationsFirewallPolicyRequest, dict] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPoliciesListAssociationsResponse: + r"""Lists associations of a specified target, i.e., + organization or folder. + + Args: + request (Union[google.cloud.compute_v1.types.ListAssociationsFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.ListAssociations. See the method + description for details. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPoliciesListAssociationsResponse: + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListAssociationsFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListAssociationsFirewallPolicyRequest): + request = compute.ListAssociationsFirewallPolicyRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_associations] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def move_unary( + self, + request: Union[compute.MoveFirewallPolicyRequest, dict] = None, + *, + firewall_policy: str = None, + parent_id: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Moves the specified firewall policy. + + Args: + request (Union[google.cloud.compute_v1.types.MoveFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.Move. See the method description for + details. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + parent_id (str): + The new parent of the firewall + policy. + + This corresponds to the ``parent_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy]) + has_flattened_params = any([firewall_policy, parent_id]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1055,19 +1780,21 @@ def get_rule( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetRuleFirewallPolicyRequest. + # in a compute.MoveFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetRuleFirewallPolicyRequest): - request = compute.GetRuleFirewallPolicyRequest(request) + if not isinstance(request, compute.MoveFirewallPolicyRequest): + request = compute.MoveFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy + if parent_id is not None: + request.parent_id = parent_id # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_rule] + rpc = self._transport._wrapped_methods[self._transport.move] # Send the request. response = rpc( @@ -1080,33 +1807,136 @@ def get_rule( # Done; return the response. return response - def insert_unary( + def move( self, - request: Union[compute.InsertFirewallPolicyRequest, dict] = None, + request: Union[compute.MoveFirewallPolicyRequest, dict] = None, *, + firewall_policy: str = None, parent_id: str = None, - firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates a new policy in the specified project using - the data included in the request. + ) -> extended_operation.ExtendedOperation: + r"""Moves the specified firewall policy. Args: - request (Union[google.cloud.compute_v1.types.InsertFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.MoveFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.Insert. See the method description for + FirewallPolicies.Move. See the method description for details. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. parent_id (str): - Parent ID for this request. The ID can be either be - "folders/[FOLDER_ID]" if the parent is a folder or - "organizations/[ORGANIZATION_ID]" if the parent is an - organization. + The new parent of the firewall + policy. This corresponds to the ``parent_id`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy, parent_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.MoveFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.MoveFirewallPolicyRequest): + request = compute.MoveFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if parent_id is not None: + request.parent_id = parent_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.move] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.parent_id = request.parent_id + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchFirewallPolicyRequest, dict] = None, + *, + firewall_policy: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Patches the specified policy with the data included + in the request. + + Args: + request (Union[google.cloud.compute_v1.types.PatchFirewallPolicyRequest, dict]): + The request object. A request message for + FirewallPolicies.Patch. See the method description for + details. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): The body resource for this request This corresponds to the ``firewall_policy_resource`` field @@ -1119,28 +1949,15 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent_id, firewall_policy_resource]) + has_flattened_params = any([firewall_policy, firewall_policy_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1148,21 +1965,21 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertFirewallPolicyRequest. + # in a compute.PatchFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertFirewallPolicyRequest): - request = compute.InsertFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchFirewallPolicyRequest): + request = compute.PatchFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. - if parent_id is not None: - request.parent_id = parent_id + if firewall_policy is not None: + request.firewall_policy = firewall_policy if firewall_policy_resource is not None: request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1175,22 +1992,36 @@ def insert_unary( # Done; return the response. return response - def list( + def patch( self, - request: Union[compute.ListFirewallPoliciesRequest, dict] = None, + request: Union[compute.PatchFirewallPolicyRequest, dict] = None, *, + firewall_policy: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Lists all the policies that have been configured for - the specified folder or organization. + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified policy with the data included + in the request. Args: - request (Union[google.cloud.compute_v1.types.ListFirewallPoliciesRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.List. See the method description for + FirewallPolicies.Patch. See the method description for details. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1198,23 +2029,37 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.firewall_policies.pagers.ListPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + # Minor optimization to avoid making a copy if the user passes - # in a compute.ListFirewallPoliciesRequest. + # in a compute.PatchFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListFirewallPoliciesRequest): - request = compute.ListFirewallPoliciesRequest(request) + if not isinstance(request, compute.PatchFirewallPolicyRequest): + request = compute.PatchFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1224,34 +2069,61 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def list_associations( + def patch_rule_unary( self, - request: Union[compute.ListAssociationsFirewallPolicyRequest, dict] = None, + request: Union[compute.PatchRuleFirewallPolicyRequest, dict] = None, *, + firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPoliciesListAssociationsResponse: - r"""Lists associations of a specified target, i.e., - organization or folder. + ) -> compute.Operation: + r"""Patches a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.ListAssociationsFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRuleFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.ListAssociations. See the method - description for details. + FirewallPolicies.PatchRule. See the method description + for details. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1259,20 +2131,37 @@ def list_associations( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPoliciesListAssociationsResponse: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([firewall_policy, firewall_policy_rule_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + # Minor optimization to avoid making a copy if the user passes - # in a compute.ListAssociationsFirewallPolicyRequest. + # in a compute.PatchRuleFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListAssociationsFirewallPolicyRequest): - request = compute.ListAssociationsFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchRuleFirewallPolicyRequest): + request = compute.PatchRuleFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_associations] + rpc = self._transport._wrapped_methods[self._transport.patch_rule] # Send the request. response = rpc( @@ -1285,23 +2174,23 @@ def list_associations( # Done; return the response. return response - def move_unary( + def patch_rule( self, - request: Union[compute.MoveFirewallPolicyRequest, dict] = None, + request: Union[compute.PatchRuleFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, - parent_id: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Moves the specified firewall policy. + ) -> extended_operation.ExtendedOperation: + r"""Patches a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.MoveFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRuleFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.Move. See the method description for - details. + FirewallPolicies.PatchRule. See the method description + for details. firewall_policy (str): Name of the firewall policy to update. @@ -1309,11 +2198,9 @@ def move_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - parent_id (str): - The new parent of the firewall - policy. - - This corresponds to the ``parent_id`` field + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1323,28 +2210,15 @@ def move_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy, parent_id]) + has_flattened_params = any([firewall_policy, firewall_policy_rule_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1352,21 +2226,21 @@ def move_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.MoveFirewallPolicyRequest. + # in a compute.PatchRuleFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.MoveFirewallPolicyRequest): - request = compute.MoveFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchRuleFirewallPolicyRequest): + request = compute.PatchRuleFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy - if parent_id is not None: - request.parent_id = parent_id + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.move] + rpc = self._transport._wrapped_methods[self._transport.patch_rule] # Send the request. response = rpc( @@ -1376,27 +2250,49 @@ def move_unary( metadata=metadata, ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def patch_unary( + def remove_association_unary( self, - request: Union[compute.PatchFirewallPolicyRequest, dict] = None, + request: Union[compute.RemoveAssociationFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, - firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Patches the specified policy with the data included - in the request. + r"""Removes an association for the specified firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.PatchFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveAssociationFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.Patch. See the method description for - details. + FirewallPolicies.RemoveAssociation. See the method + description for details. firewall_policy (str): Name of the firewall policy to update. @@ -1404,11 +2300,6 @@ def patch_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): - The body resource for this request - This corresponds to the ``firewall_policy_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1416,28 +2307,15 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy, firewall_policy_resource]) + has_flattened_params = any([firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1445,21 +2323,19 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchFirewallPolicyRequest. + # in a compute.RemoveAssociationFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchFirewallPolicyRequest): - request = compute.PatchFirewallPolicyRequest(request) + if not isinstance(request, compute.RemoveAssociationFirewallPolicyRequest): + request = compute.RemoveAssociationFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_resource is not None: - request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.remove_association] # Send the request. response = rpc( @@ -1472,23 +2348,23 @@ def patch_unary( # Done; return the response. return response - def patch_rule_unary( + def remove_association( self, - request: Union[compute.PatchRuleFirewallPolicyRequest, dict] = None, + request: Union[compute.RemoveAssociationFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, - firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Patches a rule of the specified priority. + ) -> extended_operation.ExtendedOperation: + r"""Removes an association for the specified firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.PatchRuleFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveAssociationFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.PatchRule. See the method description - for details. + FirewallPolicies.RemoveAssociation. See the method + description for details. firewall_policy (str): Name of the firewall policy to update. @@ -1496,11 +2372,6 @@ def patch_rule_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): - The body resource for this request - This corresponds to the ``firewall_policy_rule_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1508,28 +2379,15 @@ def patch_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([firewall_policy, firewall_policy_rule_resource]) + has_flattened_params = any([firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1537,21 +2395,19 @@ def patch_rule_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchRuleFirewallPolicyRequest. + # in a compute.RemoveAssociationFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchRuleFirewallPolicyRequest): - request = compute.PatchRuleFirewallPolicyRequest(request) + if not isinstance(request, compute.RemoveAssociationFirewallPolicyRequest): + request = compute.RemoveAssociationFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_rule_resource is not None: - request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch_rule] + rpc = self._transport._wrapped_methods[self._transport.remove_association] # Send the request. response = rpc( @@ -1561,26 +2417,48 @@ def patch_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def remove_association_unary( + def remove_rule_unary( self, - request: Union[compute.RemoveAssociationFirewallPolicyRequest, dict] = None, + request: Union[compute.RemoveRuleFirewallPolicyRequest, dict] = None, *, firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes an association for the specified firewall - policy. + r"""Deletes a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.RemoveAssociationFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveRuleFirewallPolicyRequest, dict]): The request object. A request message for - FirewallPolicies.RemoveAssociation. See the method - description for details. + FirewallPolicies.RemoveRule. See the method description + for details. firewall_policy (str): Name of the firewall policy to update. @@ -1595,22 +2473,9 @@ def remove_association_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1624,11 +2489,11 @@ def remove_association_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveAssociationFirewallPolicyRequest. + # in a compute.RemoveRuleFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.RemoveAssociationFirewallPolicyRequest): - request = compute.RemoveAssociationFirewallPolicyRequest(request) + if not isinstance(request, compute.RemoveRuleFirewallPolicyRequest): + request = compute.RemoveRuleFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if firewall_policy is not None: @@ -1636,7 +2501,7 @@ def remove_association_unary( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_association] + rpc = self._transport._wrapped_methods[self._transport.remove_rule] # Send the request. response = rpc( @@ -1649,7 +2514,7 @@ def remove_association_unary( # Done; return the response. return response - def remove_rule_unary( + def remove_rule( self, request: Union[compute.RemoveRuleFirewallPolicyRequest, dict] = None, *, @@ -1657,7 +2522,7 @@ def remove_rule_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Deletes a rule of the specified priority. Args: @@ -1679,22 +2544,9 @@ def remove_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1730,6 +2582,29 @@ def remove_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_organization_operations_client + operation_request = compute.GetGlobalOrganizationOperationRequest() + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/firewall_policies/transports/base.py b/google/cloud/compute_v1/services/firewall_policies/transports/base.py index 10c48b4a9..4957b8a2d 100644 --- a/google/cloud/compute_v1/services/firewall_policies/transports/base.py +++ b/google/cloud/compute_v1/services/firewall_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_organization_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -394,5 +397,29 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_organization_operations_client( + self, + ) -> global_organization_operations.GlobalOrganizationOperationsClient: + ex_op_service = self._extended_operations_services.get( + "global_organization_operations" + ) + if not ex_op_service: + ex_op_service = ( + global_organization_operations.GlobalOrganizationOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + ) + self._extended_operations_services[ + "global_organization_operations" + ] = ex_op_service + + return ex_op_service + __all__ = ("FirewallPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/firewall_policies/transports/rest.py b/google/cloud/compute_v1/services/firewall_policies/transports/rest.py index f422d980a..b95a6cade 100644 --- a/google/cloud/compute_v1/services/firewall_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/firewall_policies/transports/rest.py @@ -1533,7 +1533,9 @@ class _Insert(FirewallPoliciesRestStub): def __hash__(self): return hash("Insert") - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = { + "parentId": "", + } @classmethod def _get_unset_required_fields(cls, message_dict): @@ -1803,7 +1805,9 @@ class _Move(FirewallPoliciesRestStub): def __hash__(self): return hash("Move") - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = { + "parentId": "", + } @classmethod def _get_unset_required_fields(cls, message_dict): @@ -2836,6 +2840,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/firewalls/client.py b/google/cloud/compute_v1/services/firewalls/client.py index d2bbc3a64..f85426707 100644 --- a/google/cloud/compute_v1/services/firewalls/client.py +++ b/google/cloud/compute_v1/services/firewalls/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.firewalls import pagers from google.cloud.compute_v1.types import compute from .transports.base import FirewallsTransport, DEFAULT_CLIENT_INFO @@ -434,22 +437,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -490,6 +480,107 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteFirewallRequest, dict] = None, + *, + project: str = None, + firewall: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified firewall. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteFirewallRequest, dict]): + The request object. A request message for + Firewalls.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall (str): + Name of the firewall rule to delete. + This corresponds to the ``firewall`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteFirewallRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteFirewallRequest): + request = compute.DeleteFirewallRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall is not None: + request.firewall = firewall + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetFirewallRequest, dict] = None, @@ -604,22 +695,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertFirewallRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertFirewallRequest): + request = compute.InsertFirewallRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_resource is not None: + request.firewall_resource = firewall_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertFirewallRequest, dict] = None, + *, + project: str = None, + firewall_resource: compute.Firewall = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a firewall rule in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertFirewallRequest, dict]): + The request object. A request message for + Firewalls.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_resource (google.cloud.compute_v1.types.Firewall): + The body resource for this request + This corresponds to the ``firewall_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -657,6 +813,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -782,22 +962,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -840,6 +1007,117 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchFirewallRequest, dict] = None, + *, + project: str = None, + firewall: str = None, + firewall_resource: compute.Firewall = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified firewall rule with the data + included in the request. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchFirewallRequest, dict]): + The request object. A request message for + Firewalls.Patch. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall (str): + Name of the firewall rule to patch. + This corresponds to the ``firewall`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_resource (google.cloud.compute_v1.types.Firewall): + The body resource for this request + This corresponds to the ``firewall_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall, firewall_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchFirewallRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchFirewallRequest): + request = compute.PatchFirewallRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall is not None: + request.firewall = firewall + if firewall_resource is not None: + request.firewall_resource = firewall_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateFirewallRequest, dict] = None, @@ -884,22 +1162,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -942,6 +1207,119 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateFirewallRequest, dict] = None, + *, + project: str = None, + firewall: str = None, + firewall_resource: compute.Firewall = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified firewall rule with the data + included in the request. Note that all fields will be + updated if using PUT, even fields that are not + specified. To update individual fields, please use PATCH + instead. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateFirewallRequest, dict]): + The request object. A request message for + Firewalls.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall (str): + Name of the firewall rule to update. + This corresponds to the ``firewall`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_resource (google.cloud.compute_v1.types.Firewall): + The body resource for this request + This corresponds to the ``firewall_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall, firewall_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateFirewallRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateFirewallRequest): + request = compute.UpdateFirewallRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall is not None: + request.firewall = firewall + if firewall_resource is not None: + request.firewall_resource = firewall_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/firewalls/transports/base.py b/google/cloud/compute_v1/services/firewalls/transports/base.py index 4f9ecc4d9..a9efcaf3e 100644 --- a/google/cloud/compute_v1/services/firewalls/transports/base.py +++ b/google/cloud/compute_v1/services/firewalls/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -218,5 +221,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("FirewallsTransport",) diff --git a/google/cloud/compute_v1/services/firewalls/transports/rest.py b/google/cloud/compute_v1/services/firewalls/transports/rest.py index 9f7fa455e..e5f560ada 100644 --- a/google/cloud/compute_v1/services/firewalls/transports/rest.py +++ b/google/cloud/compute_v1/services/firewalls/transports/rest.py @@ -1010,6 +1010,10 @@ def update(self) -> Callable[[compute.UpdateFirewallRequest], compute.Operation] # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/forwarding_rules/client.py b/google/cloud/compute_v1/services/forwarding_rules/client.py index a7c0aaa73..2c56d062c 100644 --- a/google/cloud/compute_v1/services/forwarding_rules/client.py +++ b/google/cloud/compute_v1/services/forwarding_rules/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.forwarding_rules import pagers from google.cloud.compute_v1.types import compute from .transports.base import ForwardingRulesTransport, DEFAULT_CLIENT_INFO @@ -525,22 +528,98 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, forwarding_rule]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteForwardingRuleRequest): + request = compute.DeleteForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if forwarding_rule is not None: + request.forwarding_rule = forwarding_rule + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteForwardingRuleRequest, dict] = None, + *, + project: str = None, + region: str = None, + forwarding_rule: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified ForwardingRule resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteForwardingRuleRequest, dict]): + The request object. A request message for + ForwardingRules.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule (str): + Name of the ForwardingRule resource + to delete. + + This corresponds to the ``forwarding_rule`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -580,6 +659,31 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -726,22 +830,98 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, forwarding_rule_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertForwardingRuleRequest): + request = compute.InsertForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if forwarding_rule_resource is not None: + request.forwarding_rule_resource = forwarding_rule_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertForwardingRuleRequest, dict] = None, + *, + project: str = None, + region: str = None, + forwarding_rule_resource: compute.ForwardingRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a ForwardingRule resource in the specified + project and region using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertForwardingRuleRequest, dict]): + The request object. A request message for + ForwardingRules.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule_resource (google.cloud.compute_v1.types.ForwardingRule): + The body resource for this request + This corresponds to the ``forwarding_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -781,6 +961,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -929,22 +1134,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -991,6 +1183,133 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchForwardingRuleRequest, dict] = None, + *, + project: str = None, + region: str = None, + forwarding_rule: str = None, + forwarding_rule_resource: compute.ForwardingRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified forwarding rule with the data included in + the request. This method supports PATCH semantics and uses the + JSON merge patch format and processing rules. Currently, you can + only patch the network_tier field. + + Args: + request (Union[google.cloud.compute_v1.types.PatchForwardingRuleRequest, dict]): + The request object. A request message for + ForwardingRules.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule (str): + Name of the ForwardingRule resource + to patch. + + This corresponds to the ``forwarding_rule`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule_resource (google.cloud.compute_v1.types.ForwardingRule): + The body resource for this request + This corresponds to the ``forwarding_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, forwarding_rule, forwarding_rule_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchForwardingRuleRequest): + request = compute.PatchForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if forwarding_rule is not None: + request.forwarding_rule = forwarding_rule + if forwarding_rule_resource is not None: + request.forwarding_rule_resource = forwarding_rule_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_labels_unary( self, request: Union[compute.SetLabelsForwardingRuleRequest, dict] = None, @@ -1041,22 +1360,9 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1105,6 +1411,132 @@ def set_labels_unary( # Done; return the response. return response + def set_labels( + self, + request: Union[compute.SetLabelsForwardingRuleRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource: str = None, + region_set_labels_request_resource: compute.RegionSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on the specified resource. To learn + more about labels, read the Labeling Resources + documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsForwardingRuleRequest, dict]): + The request object. A request message for + ForwardingRules.SetLabels. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + This corresponds to the ``region_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, resource, region_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsForwardingRuleRequest): + request = compute.SetLabelsForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource is not None: + request.resource = resource + if region_set_labels_request_resource is not None: + request.region_set_labels_request_resource = ( + region_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_target_unary( self, request: Union[compute.SetTargetForwardingRuleRequest, dict] = None, @@ -1156,22 +1588,9 @@ def set_target_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1218,6 +1637,131 @@ def set_target_unary( # Done; return the response. return response + def set_target( + self, + request: Union[compute.SetTargetForwardingRuleRequest, dict] = None, + *, + project: str = None, + region: str = None, + forwarding_rule: str = None, + target_reference_resource: compute.TargetReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes target URL for forwarding rule. The new + target should be of the same type as the old target. + + Args: + request (Union[google.cloud.compute_v1.types.SetTargetForwardingRuleRequest, dict]): + The request object. A request message for + ForwardingRules.SetTarget. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule (str): + Name of the ForwardingRule resource + in which target is to be set. + + This corresponds to the ``forwarding_rule`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_reference_resource (google.cloud.compute_v1.types.TargetReference): + The body resource for this request + This corresponds to the ``target_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, forwarding_rule, target_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetTargetForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetTargetForwardingRuleRequest): + request = compute.SetTargetForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if forwarding_rule is not None: + request.forwarding_rule = forwarding_rule + if target_reference_resource is not None: + request.target_reference_resource = target_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_target] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/forwarding_rules/transports/base.py b/google/cloud/compute_v1/services/forwarding_rules/transports/base.py index d0beee2c8..884e2b0ae 100644 --- a/google/cloud/compute_v1/services/forwarding_rules/transports/base.py +++ b/google/cloud/compute_v1/services/forwarding_rules/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -249,5 +252,21 @@ def set_target( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ForwardingRulesTransport",) diff --git a/google/cloud/compute_v1/services/forwarding_rules/transports/rest.py b/google/cloud/compute_v1/services/forwarding_rules/transports/rest.py index 6fb679f98..e26a04c7f 100644 --- a/google/cloud/compute_v1/services/forwarding_rules/transports/rest.py +++ b/google/cloud/compute_v1/services/forwarding_rules/transports/rest.py @@ -1348,6 +1348,10 @@ def set_target( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/global_addresses/client.py b/google/cloud/compute_v1/services/global_addresses/client.py index 326e398d1..04a8a669f 100644 --- a/google/cloud/compute_v1/services/global_addresses/client.py +++ b/google/cloud/compute_v1/services/global_addresses/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.global_addresses import pagers from google.cloud.compute_v1.types import compute from .transports.base import GlobalAddressesTransport, DEFAULT_CLIENT_INFO @@ -438,22 +441,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -494,6 +484,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteGlobalAddressRequest, dict] = None, + *, + project: str = None, + address: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified address resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteGlobalAddressRequest, dict]): + The request object. A request message for + GlobalAddresses.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + address (str): + Name of the address resource to + delete. + + This corresponds to the ``address`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, address]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteGlobalAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteGlobalAddressRequest): + request = compute.DeleteGlobalAddressRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if address is not None: + request.address = address + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetGlobalAddressRequest, dict] = None, @@ -614,22 +707,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, address_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertGlobalAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertGlobalAddressRequest): + request = compute.InsertGlobalAddressRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if address_resource is not None: + request.address_resource = address_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertGlobalAddressRequest, dict] = None, + *, + project: str = None, + address_resource: compute.Address = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an address resource in the specified project + by using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertGlobalAddressRequest, dict]): + The request object. A request message for + GlobalAddresses.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + address_resource (google.cloud.compute_v1.types.Address): + The body resource for this request + This corresponds to the ``address_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -667,6 +825,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/global_addresses/transports/base.py b/google/cloud/compute_v1/services/global_addresses/transports/base.py index c2224499b..6f741c1f3 100644 --- a/google/cloud/compute_v1/services/global_addresses/transports/base.py +++ b/google/cloud/compute_v1/services/global_addresses/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -190,5 +193,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("GlobalAddressesTransport",) diff --git a/google/cloud/compute_v1/services/global_addresses/transports/rest.py b/google/cloud/compute_v1/services/global_addresses/transports/rest.py index 613226d75..3f11c99f5 100644 --- a/google/cloud/compute_v1/services/global_addresses/transports/rest.py +++ b/google/cloud/compute_v1/services/global_addresses/transports/rest.py @@ -735,6 +735,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/global_forwarding_rules/client.py b/google/cloud/compute_v1/services/global_forwarding_rules/client.py index 8edb12412..59ad112ec 100644 --- a/google/cloud/compute_v1/services/global_forwarding_rules/client.py +++ b/google/cloud/compute_v1/services/global_forwarding_rules/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.global_forwarding_rules import pagers from google.cloud.compute_v1.types import compute from .transports.base import GlobalForwardingRulesTransport, DEFAULT_CLIENT_INFO @@ -438,22 +441,88 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, forwarding_rule]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteGlobalForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteGlobalForwardingRuleRequest): + request = compute.DeleteGlobalForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if forwarding_rule is not None: + request.forwarding_rule = forwarding_rule + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteGlobalForwardingRuleRequest, dict] = None, + *, + project: str = None, + forwarding_rule: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified GlobalForwardingRule resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteGlobalForwardingRuleRequest, dict]): + The request object. A request message for + GlobalForwardingRules.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule (str): + Name of the ForwardingRule resource + to delete. + + This corresponds to the ``forwarding_rule`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -491,6 +560,30 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -621,22 +714,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -677,6 +757,109 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertGlobalForwardingRuleRequest, dict] = None, + *, + project: str = None, + forwarding_rule_resource: compute.ForwardingRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a GlobalForwardingRule resource in the + specified project using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertGlobalForwardingRuleRequest, dict]): + The request object. A request message for + GlobalForwardingRules.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule_resource (google.cloud.compute_v1.types.ForwardingRule): + The body resource for this request + This corresponds to the ``forwarding_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, forwarding_rule_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertGlobalForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertGlobalForwardingRuleRequest): + request = compute.InsertGlobalForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if forwarding_rule_resource is not None: + request.forwarding_rule_resource = forwarding_rule_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListGlobalForwardingRulesRequest, dict] = None, @@ -804,22 +987,99 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, forwarding_rule, forwarding_rule_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchGlobalForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchGlobalForwardingRuleRequest): + request = compute.PatchGlobalForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if forwarding_rule is not None: + request.forwarding_rule = forwarding_rule + if forwarding_rule_resource is not None: + request.forwarding_rule_resource = forwarding_rule_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchGlobalForwardingRuleRequest, dict] = None, + *, + project: str = None, + forwarding_rule: str = None, + forwarding_rule_resource: compute.ForwardingRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified forwarding rule with the data included in + the request. This method supports PATCH semantics and uses the + JSON merge patch format and processing rules. Currently, you can + only patch the network_tier field. + + Args: + request (Union[google.cloud.compute_v1.types.PatchGlobalForwardingRuleRequest, dict]): + The request object. A request message for + GlobalForwardingRules.Patch. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule (str): + Name of the ForwardingRule resource + to patch. + + This corresponds to the ``forwarding_rule`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule_resource (google.cloud.compute_v1.types.ForwardingRule): + The body resource for this request + This corresponds to the ``forwarding_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -859,6 +1119,30 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -906,22 +1190,9 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -968,6 +1239,123 @@ def set_labels_unary( # Done; return the response. return response + def set_labels( + self, + request: Union[compute.SetLabelsGlobalForwardingRuleRequest, dict] = None, + *, + project: str = None, + resource: str = None, + global_set_labels_request_resource: compute.GlobalSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on the specified resource. To learn + more about labels, read the Labeling resources + documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsGlobalForwardingRuleRequest, dict]): + The request object. A request message for + GlobalForwardingRules.SetLabels. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + This corresponds to the ``global_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, resource, global_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsGlobalForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsGlobalForwardingRuleRequest): + request = compute.SetLabelsGlobalForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if resource is not None: + request.resource = resource + if global_set_labels_request_resource is not None: + request.global_set_labels_request_resource = ( + global_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_target_unary( self, request: Union[compute.SetTargetGlobalForwardingRuleRequest, dict] = None, @@ -1012,22 +1400,9 @@ def set_target_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1072,6 +1447,121 @@ def set_target_unary( # Done; return the response. return response + def set_target( + self, + request: Union[compute.SetTargetGlobalForwardingRuleRequest, dict] = None, + *, + project: str = None, + forwarding_rule: str = None, + target_reference_resource: compute.TargetReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes target URL for the GlobalForwardingRule + resource. The new target should be of the same type as + the old target. + + Args: + request (Union[google.cloud.compute_v1.types.SetTargetGlobalForwardingRuleRequest, dict]): + The request object. A request message for + GlobalForwardingRules.SetTarget. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + forwarding_rule (str): + Name of the ForwardingRule resource + in which target is to be set. + + This corresponds to the ``forwarding_rule`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_reference_resource (google.cloud.compute_v1.types.TargetReference): + The body resource for this request + This corresponds to the ``target_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, forwarding_rule, target_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetTargetGlobalForwardingRuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetTargetGlobalForwardingRuleRequest): + request = compute.SetTargetGlobalForwardingRuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if forwarding_rule is not None: + request.forwarding_rule = forwarding_rule + if target_reference_resource is not None: + request.target_reference_resource = target_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_target] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/global_forwarding_rules/transports/base.py b/google/cloud/compute_v1/services/global_forwarding_rules/transports/base.py index 1249dbd2f..6375f059a 100644 --- a/google/cloud/compute_v1/services/global_forwarding_rules/transports/base.py +++ b/google/cloud/compute_v1/services/global_forwarding_rules/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -232,5 +235,21 @@ def set_target( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("GlobalForwardingRulesTransport",) diff --git a/google/cloud/compute_v1/services/global_forwarding_rules/transports/rest.py b/google/cloud/compute_v1/services/global_forwarding_rules/transports/rest.py index c3857b861..1ab3a48d1 100644 --- a/google/cloud/compute_v1/services/global_forwarding_rules/transports/rest.py +++ b/google/cloud/compute_v1/services/global_forwarding_rules/transports/rest.py @@ -1216,6 +1216,10 @@ def set_target( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/global_network_endpoint_groups/client.py b/google/cloud/compute_v1/services/global_network_endpoint_groups/client.py index a4227738e..fc653ad06 100644 --- a/google/cloud/compute_v1/services/global_network_endpoint_groups/client.py +++ b/google/cloud/compute_v1/services/global_network_endpoint_groups/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.global_network_endpoint_groups import pagers from google.cloud.compute_v1.types import compute from .transports.base import GlobalNetworkEndpointGroupsTransport, DEFAULT_CLIENT_INFO @@ -451,22 +454,9 @@ def attach_network_endpoints_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -524,6 +514,137 @@ def attach_network_endpoints_unary( # Done; return the response. return response + def attach_network_endpoints( + self, + request: Union[ + compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, dict + ] = None, + *, + project: str = None, + network_endpoint_group: str = None, + global_network_endpoint_groups_attach_endpoints_request_resource: compute.GlobalNetworkEndpointGroupsAttachEndpointsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Attach a network endpoint to the specified network + endpoint group. + + Args: + request (Union[google.cloud.compute_v1.types.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, dict]): + The request object. A request message for + GlobalNetworkEndpointGroups.AttachNetworkEndpoints. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group where you are attaching network + endpoints to. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + global_network_endpoint_groups_attach_endpoints_request_resource (google.cloud.compute_v1.types.GlobalNetworkEndpointGroupsAttachEndpointsRequest): + The body resource for this request + This corresponds to the ``global_network_endpoint_groups_attach_endpoints_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + network_endpoint_group, + global_network_endpoint_groups_attach_endpoints_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest + ): + request = compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + if ( + global_network_endpoint_groups_attach_endpoints_request_resource + is not None + ): + request.global_network_endpoint_groups_attach_endpoints_request_resource = ( + global_network_endpoint_groups_attach_endpoints_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.attach_network_endpoints] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def delete_unary( self, request: Union[compute.DeleteGlobalNetworkEndpointGroupRequest, dict] = None, @@ -563,22 +684,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -619,6 +727,112 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteGlobalNetworkEndpointGroupRequest, dict] = None, + *, + project: str = None, + network_endpoint_group: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified network endpoint group.Note + that the NEG cannot be deleted if there are backend + services referencing it. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteGlobalNetworkEndpointGroupRequest, dict]): + The request object. A request message for + GlobalNetworkEndpointGroups.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group to delete. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, network_endpoint_group]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteGlobalNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteGlobalNetworkEndpointGroupRequest): + request = compute.DeleteGlobalNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def detach_network_endpoints_unary( self, request: Union[ @@ -666,22 +880,116 @@ def detach_network_endpoints_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + network_endpoint_group, + global_network_endpoint_groups_detach_endpoints_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest + ): + request = compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + if ( + global_network_endpoint_groups_detach_endpoints_request_resource + is not None + ): + request.global_network_endpoint_groups_detach_endpoints_request_resource = ( + global_network_endpoint_groups_detach_endpoints_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.detach_network_endpoints] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def detach_network_endpoints( + self, + request: Union[ + compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, dict + ] = None, + *, + project: str = None, + network_endpoint_group: str = None, + global_network_endpoint_groups_detach_endpoints_request_resource: compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Detach the network endpoint from the specified + network endpoint group. + + Args: + request (Union[google.cloud.compute_v1.types.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, dict]): + The request object. A request message for + GlobalNetworkEndpointGroups.DetachNetworkEndpoints. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group where you are removing network + endpoints. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + global_network_endpoint_groups_detach_endpoints_request_resource (google.cloud.compute_v1.types.GlobalNetworkEndpointGroupsDetachEndpointsRequest): + The body resource for this request + This corresponds to the ``global_network_endpoint_groups_detach_endpoints_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -736,6 +1044,30 @@ def detach_network_endpoints_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -865,22 +1197,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -923,6 +1242,111 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertGlobalNetworkEndpointGroupRequest, dict] = None, + *, + project: str = None, + network_endpoint_group_resource: compute.NetworkEndpointGroup = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a network endpoint group in the specified + project using the parameters that are included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertGlobalNetworkEndpointGroupRequest, dict]): + The request object. A request message for + GlobalNetworkEndpointGroups.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group_resource (google.cloud.compute_v1.types.NetworkEndpointGroup): + The body resource for this request + This corresponds to the ``network_endpoint_group_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, network_endpoint_group_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertGlobalNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertGlobalNetworkEndpointGroupRequest): + request = compute.InsertGlobalNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network_endpoint_group_resource is not None: + request.network_endpoint_group_resource = ( + network_endpoint_group_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListGlobalNetworkEndpointGroupsRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/base.py b/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/base.py index b289b0e4f..5c85ac823 100644 --- a/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/base.py +++ b/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -238,5 +241,21 @@ def list_network_endpoints( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("GlobalNetworkEndpointGroupsTransport",) diff --git a/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/rest.py b/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/rest.py index 21f8c6166..568d8ad49 100644 --- a/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/global_network_endpoint_groups/transports/rest.py @@ -1255,6 +1255,10 @@ def list_network_endpoints( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/global_operations/client.py b/google/cloud/compute_v1/services/global_operations/client.py index 211302584..d6f785cbc 100644 --- a/google/cloud/compute_v1/services/global_operations/client.py +++ b/google/cloud/compute_v1/services/global_operations/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/global_operations/transports/base.py b/google/cloud/compute_v1/services/global_operations/transports/base.py index cc66e8598..2be12872f 100644 --- a/google/cloud/compute_v1/services/global_operations/transports/base.py +++ b/google/cloud/compute_v1/services/global_operations/transports/base.py @@ -83,6 +83,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -209,5 +210,9 @@ def wait( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("GlobalOperationsTransport",) diff --git a/google/cloud/compute_v1/services/global_operations/transports/rest.py b/google/cloud/compute_v1/services/global_operations/transports/rest.py index 019fa3f32..b4b1394ab 100644 --- a/google/cloud/compute_v1/services/global_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/global_operations/transports/rest.py @@ -868,6 +868,10 @@ def wait(self) -> Callable[[compute.WaitGlobalOperationRequest], compute.Operati # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/global_organization_operations/client.py b/google/cloud/compute_v1/services/global_organization_operations/client.py index 9d9e2f127..251735241 100644 --- a/google/cloud/compute_v1/services/global_organization_operations/client.py +++ b/google/cloud/compute_v1/services/global_organization_operations/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/global_organization_operations/transports/base.py b/google/cloud/compute_v1/services/global_organization_operations/transports/base.py index 3e7d4caaa..3d3f10a54 100644 --- a/google/cloud/compute_v1/services/global_organization_operations/transports/base.py +++ b/google/cloud/compute_v1/services/global_organization_operations/transports/base.py @@ -83,6 +83,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -179,5 +180,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("GlobalOrganizationOperationsTransport",) diff --git a/google/cloud/compute_v1/services/global_organization_operations/transports/rest.py b/google/cloud/compute_v1/services/global_organization_operations/transports/rest.py index 375ffbb6e..d4a151478 100644 --- a/google/cloud/compute_v1/services/global_organization_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/global_organization_operations/transports/rest.py @@ -590,6 +590,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/global_public_delegated_prefixes/client.py b/google/cloud/compute_v1/services/global_public_delegated_prefixes/client.py index df06e43c7..c24251759 100644 --- a/google/cloud/compute_v1/services/global_public_delegated_prefixes/client.py +++ b/google/cloud/compute_v1/services/global_public_delegated_prefixes/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.global_public_delegated_prefixes import pagers from google.cloud.compute_v1.types import compute from .transports.base import GlobalPublicDelegatedPrefixesTransport, DEFAULT_CLIENT_INFO @@ -440,22 +443,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -496,6 +486,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteGlobalPublicDelegatedPrefixeRequest, dict] = None, + *, + project: str = None, + public_delegated_prefix: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified global PublicDelegatedPrefix. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteGlobalPublicDelegatedPrefixeRequest, dict]): + The request object. A request message for + GlobalPublicDelegatedPrefixes.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix (str): + Name of the PublicDelegatedPrefix + resource to delete. + + This corresponds to the ``public_delegated_prefix`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, public_delegated_prefix]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteGlobalPublicDelegatedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteGlobalPublicDelegatedPrefixeRequest): + request = compute.DeleteGlobalPublicDelegatedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if public_delegated_prefix is not None: + request.public_delegated_prefix = public_delegated_prefix + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetGlobalPublicDelegatedPrefixeRequest, dict] = None, @@ -619,22 +712,90 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, public_delegated_prefix_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertGlobalPublicDelegatedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertGlobalPublicDelegatedPrefixeRequest): + request = compute.InsertGlobalPublicDelegatedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if public_delegated_prefix_resource is not None: + request.public_delegated_prefix_resource = ( + public_delegated_prefix_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertGlobalPublicDelegatedPrefixeRequest, dict] = None, + *, + project: str = None, + public_delegated_prefix_resource: compute.PublicDelegatedPrefix = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a global PublicDelegatedPrefix in the + specified project using the parameters that are included + in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertGlobalPublicDelegatedPrefixeRequest, dict]): + The request object. A request message for + GlobalPublicDelegatedPrefixes.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix_resource (google.cloud.compute_v1.types.PublicDelegatedPrefix): + The body resource for this request + This corresponds to the ``public_delegated_prefix_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -674,6 +835,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -802,22 +987,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -864,6 +1036,124 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchGlobalPublicDelegatedPrefixeRequest, dict] = None, + *, + project: str = None, + public_delegated_prefix: str = None, + public_delegated_prefix_resource: compute.PublicDelegatedPrefix = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified global PublicDelegatedPrefix + resource with the data included in the request. This + method supports PATCH semantics and uses JSON merge + patch format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchGlobalPublicDelegatedPrefixeRequest, dict]): + The request object. A request message for + GlobalPublicDelegatedPrefixes.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix (str): + Name of the PublicDelegatedPrefix + resource to patch. + + This corresponds to the ``public_delegated_prefix`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix_resource (google.cloud.compute_v1.types.PublicDelegatedPrefix): + The body resource for this request + This corresponds to the ``public_delegated_prefix_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, public_delegated_prefix, public_delegated_prefix_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchGlobalPublicDelegatedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchGlobalPublicDelegatedPrefixeRequest): + request = compute.PatchGlobalPublicDelegatedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if public_delegated_prefix is not None: + request.public_delegated_prefix = public_delegated_prefix + if public_delegated_prefix_resource is not None: + request.public_delegated_prefix_resource = ( + public_delegated_prefix_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/base.py b/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/base.py index e2f7aa7f1..c162ad580 100644 --- a/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/base.py +++ b/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -207,5 +210,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("GlobalPublicDelegatedPrefixesTransport",) diff --git a/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/rest.py b/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/rest.py index 5823d53f6..ef3717f51 100644 --- a/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/rest.py +++ b/google/cloud/compute_v1/services/global_public_delegated_prefixes/transports/rest.py @@ -934,6 +934,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/health_checks/client.py b/google/cloud/compute_v1/services/health_checks/client.py index ade7a237e..971b6b32a 100644 --- a/google/cloud/compute_v1/services/health_checks/client.py +++ b/google/cloud/compute_v1/services/health_checks/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.health_checks import pagers from google.cloud.compute_v1.types import compute from .transports.base import HealthChecksTransport, DEFAULT_CLIENT_INFO @@ -518,22 +521,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -574,6 +564,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteHealthCheckRequest, dict] = None, + *, + project: str = None, + health_check: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified HealthCheck resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteHealthCheckRequest, dict]): + The request object. A request message for + HealthChecks.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check (str): + Name of the HealthCheck resource to + delete. + + This corresponds to the ``health_check`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, health_check]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteHealthCheckRequest): + request = compute.DeleteHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if health_check is not None: + request.health_check = health_check + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetHealthCheckRequest, dict] = None, @@ -707,22 +800,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, health_check_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertHealthCheckRequest): + request = compute.InsertHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if health_check_resource is not None: + request.health_check_resource = health_check_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertHealthCheckRequest, dict] = None, + *, + project: str = None, + health_check_resource: compute.HealthCheck = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a HealthCheck resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertHealthCheckRequest, dict]): + The request object. A request message for + HealthChecks.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_resource (google.cloud.compute_v1.types.HealthCheck): + The body resource for this request + This corresponds to the ``health_check_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -760,6 +918,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -890,22 +1072,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -948,6 +1117,120 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchHealthCheckRequest, dict] = None, + *, + project: str = None, + health_check: str = None, + health_check_resource: compute.HealthCheck = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates a HealthCheck resource in the specified + project using the data included in the request. This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchHealthCheckRequest, dict]): + The request object. A request message for + HealthChecks.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check (str): + Name of the HealthCheck resource to + patch. + + This corresponds to the ``health_check`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_resource (google.cloud.compute_v1.types.HealthCheck): + The body resource for this request + This corresponds to the ``health_check_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, health_check, health_check_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchHealthCheckRequest): + request = compute.PatchHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if health_check is not None: + request.health_check = health_check + if health_check_resource is not None: + request.health_check_resource = health_check_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateHealthCheckRequest, dict] = None, @@ -991,22 +1274,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1049,6 +1319,118 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateHealthCheckRequest, dict] = None, + *, + project: str = None, + health_check: str = None, + health_check_resource: compute.HealthCheck = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates a HealthCheck resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateHealthCheckRequest, dict]): + The request object. A request message for + HealthChecks.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check (str): + Name of the HealthCheck resource to + update. + + This corresponds to the ``health_check`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_resource (google.cloud.compute_v1.types.HealthCheck): + The body resource for this request + This corresponds to the ``health_check_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, health_check, health_check_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateHealthCheckRequest): + request = compute.UpdateHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if health_check is not None: + request.health_check = health_check + if health_check_resource is not None: + request.health_check_resource = health_check_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/health_checks/transports/base.py b/google/cloud/compute_v1/services/health_checks/transports/base.py index feb1eb7ff..8b12f4624 100644 --- a/google/cloud/compute_v1/services/health_checks/transports/base.py +++ b/google/cloud/compute_v1/services/health_checks/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -235,5 +238,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("HealthChecksTransport",) diff --git a/google/cloud/compute_v1/services/health_checks/transports/rest.py b/google/cloud/compute_v1/services/health_checks/transports/rest.py index 7002159b4..1adef03b5 100644 --- a/google/cloud/compute_v1/services/health_checks/transports/rest.py +++ b/google/cloud/compute_v1/services/health_checks/transports/rest.py @@ -1178,6 +1178,10 @@ def update(self) -> Callable[[compute.UpdateHealthCheckRequest], compute.Operati # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/image_family_views/client.py b/google/cloud/compute_v1/services/image_family_views/client.py index b0c3897c4..a7e902510 100644 --- a/google/cloud/compute_v1/services/image_family_views/client.py +++ b/google/cloud/compute_v1/services/image_family_views/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/image_family_views/transports/base.py b/google/cloud/compute_v1/services/image_family_views/transports/base.py index 96875805a..7b465f87d 100644 --- a/google/cloud/compute_v1/services/image_family_views/transports/base.py +++ b/google/cloud/compute_v1/services/image_family_views/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -149,5 +150,9 @@ def get( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("ImageFamilyViewsTransport",) diff --git a/google/cloud/compute_v1/services/image_family_views/transports/rest.py b/google/cloud/compute_v1/services/image_family_views/transports/rest.py index eaaf0bdcb..f449a0756 100644 --- a/google/cloud/compute_v1/services/image_family_views/transports/rest.py +++ b/google/cloud/compute_v1/services/image_family_views/transports/rest.py @@ -301,6 +301,10 @@ def get( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/images/client.py b/google/cloud/compute_v1/services/images/client.py index 1b39ec338..2f0cfda73 100644 --- a/google/cloud/compute_v1/services/images/client.py +++ b/google/cloud/compute_v1/services/images/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.images import pagers from google.cloud.compute_v1.types import compute from .transports.base import ImagesTransport, DEFAULT_CLIENT_INFO @@ -433,22 +436,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -489,6 +479,106 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteImageRequest, dict] = None, + *, + project: str = None, + image: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified image. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteImageRequest, dict]): + The request object. A request message for Images.Delete. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + image (str): + Name of the image resource to delete. + This corresponds to the ``image`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, image]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteImageRequest): + request = compute.DeleteImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if image is not None: + request.image = image + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def deprecate_unary( self, request: Union[compute.DeprecateImageRequest, dict] = None, @@ -531,22 +621,9 @@ def deprecate_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -589,6 +666,117 @@ def deprecate_unary( # Done; return the response. return response + def deprecate( + self, + request: Union[compute.DeprecateImageRequest, dict] = None, + *, + project: str = None, + image: str = None, + deprecation_status_resource: compute.DeprecationStatus = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the deprecation status of an image. If an empty + request body is given, clears the deprecation status + instead. + + Args: + request (Union[google.cloud.compute_v1.types.DeprecateImageRequest, dict]): + The request object. A request message for + Images.Deprecate. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + image (str): + Image name. + This corresponds to the ``image`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + deprecation_status_resource (google.cloud.compute_v1.types.DeprecationStatus): + The body resource for this request + This corresponds to the ``deprecation_status_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, image, deprecation_status_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeprecateImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeprecateImageRequest): + request = compute.DeprecateImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if image is not None: + request.image = image + if deprecation_status_resource is not None: + request.deprecation_status_resource = deprecation_status_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.deprecate] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetImageRequest, dict] = None, @@ -902,22 +1090,86 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, image_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertImageRequest): + request = compute.InsertImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if image_resource is not None: + request.image_resource = image_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertImageRequest, dict] = None, + *, + project: str = None, + image_resource: compute.Image = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an image in the specified project using the + data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertImageRequest, dict]): + The request object. A request message for Images.Insert. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + image_resource (google.cloud.compute_v1.types.Image): + The body resource for this request + This corresponds to the ``image_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -955,6 +1207,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1085,22 +1361,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1143,6 +1406,116 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchImageRequest, dict] = None, + *, + project: str = None, + image: str = None, + image_resource: compute.Image = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified image with the data included in + the request. Only the following fields can be modified: + family, description, deprecation status. + + Args: + request (Union[google.cloud.compute_v1.types.PatchImageRequest, dict]): + The request object. A request message for Images.Patch. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + image (str): + Name of the image resource to patch. + This corresponds to the ``image`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + image_resource (google.cloud.compute_v1.types.Image): + The body resource for this request + This corresponds to the ``image_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, image, image_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchImageRequest): + request = compute.PatchImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if image is not None: + request.image = image + if image_resource is not None: + request.image_resource = image_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_iam_policy( self, request: Union[compute.SetIamPolicyImageRequest, dict] = None, @@ -1316,22 +1689,9 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1378,6 +1738,122 @@ def set_labels_unary( # Done; return the response. return response + def set_labels( + self, + request: Union[compute.SetLabelsImageRequest, dict] = None, + *, + project: str = None, + resource: str = None, + global_set_labels_request_resource: compute.GlobalSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on an image. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsImageRequest, dict]): + The request object. A request message for + Images.SetLabels. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + This corresponds to the ``global_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, resource, global_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsImageRequest): + request = compute.SetLabelsImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if resource is not None: + request.resource = resource + if global_set_labels_request_resource is not None: + request.global_set_labels_request_resource = ( + global_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def test_iam_permissions( self, request: Union[compute.TestIamPermissionsImageRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/images/transports/base.py b/google/cloud/compute_v1/services/images/transports/base.py index 5b8f5cce7..14c84882b 100644 --- a/google/cloud/compute_v1/services/images/transports/base.py +++ b/google/cloud/compute_v1/services/images/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -289,5 +292,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ImagesTransport",) diff --git a/google/cloud/compute_v1/services/images/transports/rest.py b/google/cloud/compute_v1/services/images/transports/rest.py index 76be15223..f9791f29b 100644 --- a/google/cloud/compute_v1/services/images/transports/rest.py +++ b/google/cloud/compute_v1/services/images/transports/rest.py @@ -1782,6 +1782,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/instance_group_managers/client.py b/google/cloud/compute_v1/services/instance_group_managers/client.py index 921236396..d83bc3893 100644 --- a/google/cloud/compute_v1/services/instance_group_managers/client.py +++ b/google/cloud/compute_v1/services/instance_group_managers/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.instance_group_managers import pagers from google.cloud.compute_v1.types import compute from .transports.base import InstanceGroupManagersTransport, DEFAULT_CLIENT_INFO @@ -470,22 +473,9 @@ def abandon_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -539,6 +529,155 @@ def abandon_instances_unary( # Done; return the response. return response + def abandon_instances( + self, + request: Union[ + compute.AbandonInstancesInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_managers_abandon_instances_request_resource: compute.InstanceGroupManagersAbandonInstancesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Flags the specified instances to be removed from the + managed instance group. Abandoning an instance does not + delete the instance, but it does remove the instance + from any target pools that are applied by the managed + instance group. This method reduces the targetSize of + the managed instance group by the number of instances + that you abandon. This operation is marked as DONE when + the action is scheduled even if the instances have not + yet been removed from the group. You must separately + verify the status of the abandoning action with the + listmanagedinstances method. If the group is part of a + backend service that has enabled connection draining, it + can take up to 60 seconds after the connection draining + duration has elapsed before the VM instance is removed + or deleted. You can specify a maximum of 1000 instances + with this method per request. + + Args: + request (Union[google.cloud.compute_v1.types.AbandonInstancesInstanceGroupManagerRequest, dict]): + The request object. Messages + A request message for + InstanceGroupManagers.AbandonInstances. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_abandon_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersAbandonInstancesRequest): + The body resource for this request + This corresponds to the ``instance_group_managers_abandon_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_abandon_instances_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AbandonInstancesInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AbandonInstancesInstanceGroupManagerRequest): + request = compute.AbandonInstancesInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_managers_abandon_instances_request_resource is not None: + request.instance_group_managers_abandon_instances_request_resource = ( + instance_group_managers_abandon_instances_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.abandon_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def aggregated_list( self, request: Union[compute.AggregatedListInstanceGroupManagersRequest, dict] = None, @@ -674,22 +813,9 @@ def apply_updates_to_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -749,32 +875,29 @@ def apply_updates_to_instances_unary( # Done; return the response. return response - def create_instances_unary( + def apply_updates_to_instances( self, - request: Union[compute.CreateInstancesInstanceGroupManagerRequest, dict] = None, + request: Union[ + compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, dict + ] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_create_instances_request_resource: compute.InstanceGroupManagersCreateInstancesRequest = None, + instance_group_managers_apply_updates_request_resource: compute.InstanceGroupManagersApplyUpdatesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates instances with per-instance configs in this - managed instance group. Instances are created using the - current instance template. The create instances - operation is marked DONE if the createInstances request - is successful. The underlying actions take additional - time. You must separately verify the status of the - creating or actions with the listmanagedinstances - method. + ) -> extended_operation.ExtendedOperation: + r"""Applies changes to selected instances on the managed + instance group. This method can be used to apply new + overrides and/or new versions. Args: - request (Union[google.cloud.compute_v1.types.CreateInstancesInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.ApplyUpdatesToInstancesInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.CreateInstances. See the method - description for details. + InstanceGroupManagers.ApplyUpdatesToInstances. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -782,22 +905,22 @@ def create_instances_unary( should not be set. zone (str): The name of the zone where the - managed instance group is located. It - should conform to RFC1035. + managed instance group is located. + Should conform to RFC1035. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. It should conform to RFC1035. + group, should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_create_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersCreateInstancesRequest): + instance_group_managers_apply_updates_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersApplyUpdatesRequest): The body resource for this request - This corresponds to the ``instance_group_managers_create_instances_request_resource`` field + This corresponds to the ``instance_group_managers_apply_updates_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -807,22 +930,9 @@ def create_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -833,7 +943,7 @@ def create_instances_unary( project, zone, instance_group_manager, - instance_group_managers_create_instances_request_resource, + instance_group_managers_apply_updates_request_resource, ] ) if request is not None and has_flattened_params: @@ -843,11 +953,15 @@ def create_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.CreateInstancesInstanceGroupManagerRequest. + # in a compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.CreateInstancesInstanceGroupManagerRequest): - request = compute.CreateInstancesInstanceGroupManagerRequest(request) + if not isinstance( + request, compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest + ): + request = compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -856,14 +970,16 @@ def create_instances_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if instance_group_managers_create_instances_request_resource is not None: - request.instance_group_managers_create_instances_request_resource = ( - instance_group_managers_create_instances_request_resource + if instance_group_managers_apply_updates_request_resource is not None: + request.instance_group_managers_apply_updates_request_resource = ( + instance_group_managers_apply_updates_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_instances] + rpc = self._transport._wrapped_methods[ + self._transport.apply_updates_to_instances + ] # Send the request. response = rpc( @@ -873,30 +989,60 @@ def create_instances_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def delete_unary( + def create_instances_unary( self, - request: Union[compute.DeleteInstanceGroupManagerRequest, dict] = None, + request: Union[compute.CreateInstancesInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, + instance_group_managers_create_instances_request_resource: compute.InstanceGroupManagersCreateInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Deletes the specified managed instance group and all - of the instances in that group. Note that the instance - group must not belong to a backend service. Read - Deleting an instance group for more information. + r"""Creates instances with per-instance configs in this + managed instance group. Instances are created using the + current instance template. The create instances + operation is marked DONE if the createInstances request + is successful. The underlying actions take additional + time. You must separately verify the status of the + creating or actions with the listmanagedinstances + method. Args: - request (Union[google.cloud.compute_v1.types.DeleteInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.CreateInstancesInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.Delete. See the method description - for details. + InstanceGroupManagers.CreateInstances. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -904,18 +1050,24 @@ def delete_unary( should not be set. zone (str): The name of the zone where the - managed instance group is located. + managed instance group is located. It + should conform to RFC1035. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group to delete. + group. It should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instance_group_managers_create_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersCreateInstancesRequest): + The body resource for this request + This corresponds to the ``instance_group_managers_create_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -923,28 +1075,22 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_group_manager]) + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_create_instances_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -952,11 +1098,11 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteInstanceGroupManagerRequest. + # in a compute.CreateInstancesInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteInstanceGroupManagerRequest): - request = compute.DeleteInstanceGroupManagerRequest(request) + if not isinstance(request, compute.CreateInstancesInstanceGroupManagerRequest): + request = compute.CreateInstancesInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -965,10 +1111,14 @@ def delete_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if instance_group_managers_create_instances_request_resource is not None: + request.instance_group_managers_create_instances_request_resource = ( + instance_group_managers_create_instances_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.create_instances] # Send the request. response = rpc( @@ -981,38 +1131,31 @@ def delete_unary( # Done; return the response. return response - def delete_instances_unary( + def create_instances( self, - request: Union[compute.DeleteInstancesInstanceGroupManagerRequest, dict] = None, + request: Union[compute.CreateInstancesInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_delete_instances_request_resource: compute.InstanceGroupManagersDeleteInstancesRequest = None, + instance_group_managers_create_instances_request_resource: compute.InstanceGroupManagersCreateInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Flags the specified instances in the managed instance - group for immediate deletion. The instances are also - removed from any target pools of which they were a - member. This method reduces the targetSize of the - managed instance group by the number of instances that - you delete. This operation is marked as DONE when the - action is scheduled even if the instances are still - being deleted. You must separately verify the status of - the deleting action with the listmanagedinstances - method. If the group is part of a backend service that - has enabled connection draining, it can take up to 60 - seconds after the connection draining duration has - elapsed before the VM instance is removed or deleted. - You can specify a maximum of 1000 instances with this - method per request. + ) -> extended_operation.ExtendedOperation: + r"""Creates instances with per-instance configs in this + managed instance group. Instances are created using the + current instance template. The create instances + operation is marked DONE if the createInstances request + is successful. The underlying actions take additional + time. You must separately verify the status of the + creating or actions with the listmanagedinstances + method. Args: - request (Union[google.cloud.compute_v1.types.DeleteInstancesInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.CreateInstancesInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.DeleteInstances. See the method + InstanceGroupManagers.CreateInstances. See the method description for details. project (str): Project ID for this request. @@ -1021,21 +1164,22 @@ def delete_instances_unary( should not be set. zone (str): The name of the zone where the - managed instance group is located. + managed instance group is located. It + should conform to RFC1035. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. + group. It should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_delete_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersDeleteInstancesRequest): + instance_group_managers_create_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersCreateInstancesRequest): The body resource for this request - This corresponds to the ``instance_group_managers_delete_instances_request_resource`` field + This corresponds to the ``instance_group_managers_create_instances_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1045,22 +1189,9 @@ def delete_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1071,7 +1202,7 @@ def delete_instances_unary( project, zone, instance_group_manager, - instance_group_managers_delete_instances_request_resource, + instance_group_managers_create_instances_request_resource, ] ) if request is not None and has_flattened_params: @@ -1081,11 +1212,11 @@ def delete_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteInstancesInstanceGroupManagerRequest. + # in a compute.CreateInstancesInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteInstancesInstanceGroupManagerRequest): - request = compute.DeleteInstancesInstanceGroupManagerRequest(request) + if not isinstance(request, compute.CreateInstancesInstanceGroupManagerRequest): + request = compute.CreateInstancesInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1094,14 +1225,14 @@ def delete_instances_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if instance_group_managers_delete_instances_request_resource is not None: - request.instance_group_managers_delete_instances_request_resource = ( - instance_group_managers_delete_instances_request_resource + if instance_group_managers_create_instances_request_resource is not None: + request.instance_group_managers_create_instances_request_resource = ( + instance_group_managers_create_instances_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_instances] + rpc = self._transport._wrapped_methods[self._transport.create_instances] # Send the request. response = rpc( @@ -1111,31 +1242,55 @@ def delete_instances_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def delete_per_instance_configs_unary( + def delete_unary( self, - request: Union[ - compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict - ] = None, + request: Union[compute.DeleteInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_delete_per_instance_configs_req_resource: compute.InstanceGroupManagersDeletePerInstanceConfigsReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Deletes selected per-instance configs for the managed - instance group. + r"""Deletes the specified managed instance group and all + of the instances in that group. Note that the instance + group must not belong to a backend service. Read + Deleting an instance group for more information. Args: - request (Union[google.cloud.compute_v1.types.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.DeletePerInstanceConfigs. See the - method description for details. + InstanceGroupManagers.Delete. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1143,24 +1298,18 @@ def delete_per_instance_configs_unary( should not be set. zone (str): The name of the zone where the - managed instance group is located. It - should conform to RFC1035. + managed instance group is located. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. It should conform to RFC1035. + group to delete. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_delete_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersDeletePerInstanceConfigsReq): - The body resource for this request - This corresponds to the ``instance_group_managers_delete_per_instance_configs_req_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1168,35 +1317,15 @@ def delete_per_instance_configs_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [ - project, - zone, - instance_group_manager, - instance_group_managers_delete_per_instance_configs_req_resource, - ] - ) + has_flattened_params = any([project, zone, instance_group_manager]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1204,15 +1333,11 @@ def delete_per_instance_configs_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeletePerInstanceConfigsInstanceGroupManagerRequest. + # in a compute.DeleteInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.DeletePerInstanceConfigsInstanceGroupManagerRequest - ): - request = compute.DeletePerInstanceConfigsInstanceGroupManagerRequest( - request - ) + if not isinstance(request, compute.DeleteInstanceGroupManagerRequest): + request = compute.DeleteInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1221,19 +1346,10 @@ def delete_per_instance_configs_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if ( - instance_group_managers_delete_per_instance_configs_req_resource - is not None - ): - request.instance_group_managers_delete_per_instance_configs_req_resource = ( - instance_group_managers_delete_per_instance_configs_req_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.delete_per_instance_configs - ] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1246,9 +1362,9 @@ def delete_per_instance_configs_unary( # Done; return the response. return response - def get( + def delete( self, - request: Union[compute.GetInstanceGroupManagerRequest, dict] = None, + request: Union[compute.DeleteInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, @@ -1256,15 +1372,16 @@ def get( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.InstanceGroupManager: - r"""Returns all of the details about the specified - managed instance group. Gets a list of available managed - instance groups by making a list() request. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified managed instance group and all + of the instances in that group. Note that the instance + group must not belong to a backend service. Read + Deleting an instance group for more information. Args: - request (Union[google.cloud.compute_v1.types.GetInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.Get. See the method description + InstanceGroupManagers.Delete. See the method description for details. project (str): Project ID for this request. @@ -1280,7 +1397,7 @@ def get( should not be set. instance_group_manager (str): The name of the managed instance - group. + group to delete. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this @@ -1292,16 +1409,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.InstanceGroupManager: - Represents a Managed Instance Group - resource. An instance group is a - collection of VM instances that you can - manage as a single entity. For more - information, read Instance groups. For - zonal Managed Instance Group, use the - instanceGroupManagers resource. For - regional Managed Instance Group, use the - regionInstanceGroupManagers resource. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1315,11 +1425,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetInstanceGroupManagerRequest. + # in a compute.DeleteInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetInstanceGroupManagerRequest): - request = compute.GetInstanceGroupManagerRequest(request) + if not isinstance(request, compute.DeleteInstanceGroupManagerRequest): + request = compute.DeleteInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1331,7 +1441,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1341,52 +1451,89 @@ def get( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def insert_unary( + def delete_instances_unary( self, - request: Union[compute.InsertInstanceGroupManagerRequest, dict] = None, + request: Union[compute.DeleteInstancesInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, - instance_group_manager_resource: compute.InstanceGroupManager = None, + instance_group_manager: str = None, + instance_group_managers_delete_instances_request_resource: compute.InstanceGroupManagersDeleteInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Creates a managed instance group using the - information that you specify in the request. After the - group is created, instances in the group are created - using the specified instance template. This operation is - marked as DONE when the group is created even if the - instances in the group have not yet been created. You - must separately verify the status of the individual - instances with the listmanagedinstances method. A - managed instance group can have up to 1000 VM instances - per group. Please contact Cloud Support if you need an - increase in this limit. + r"""Flags the specified instances in the managed instance + group for immediate deletion. The instances are also + removed from any target pools of which they were a + member. This method reduces the targetSize of the + managed instance group by the number of instances that + you delete. This operation is marked as DONE when the + action is scheduled even if the instances are still + being deleted. You must separately verify the status of + the deleting action with the listmanagedinstances + method. If the group is part of a backend service that + has enabled connection draining, it can take up to 60 + seconds after the connection draining duration has + elapsed before the VM instance is removed or deleted. + You can specify a maximum of 1000 instances with this + method per request. Args: - request (Union[google.cloud.compute_v1.types.InsertInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstancesInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.Insert. See the method description - for details. + InstanceGroupManagers.DeleteInstances. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. zone (str): - The name of the zone where you want - to create the managed instance group. + The name of the zone where the + managed instance group is located. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_delete_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersDeleteInstancesRequest): The body resource for this request - This corresponds to the ``instance_group_manager_resource`` field + This corresponds to the ``instance_group_managers_delete_instances_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1396,28 +1543,22 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_group_manager_resource]) + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_delete_instances_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1425,25 +1566,27 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertInstanceGroupManagerRequest. + # in a compute.DeleteInstancesInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertInstanceGroupManagerRequest): - request = compute.InsertInstanceGroupManagerRequest(request) + if not isinstance(request, compute.DeleteInstancesInstanceGroupManagerRequest): + request = compute.DeleteInstancesInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if instance_group_manager_resource is not None: - request.instance_group_manager_resource = ( - instance_group_manager_resource + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_managers_delete_instances_request_resource is not None: + request.instance_group_managers_delete_instances_request_resource = ( + instance_group_managers_delete_instances_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.delete_instances] # Send the request. response = rpc( @@ -1456,24 +1599,39 @@ def insert_unary( # Done; return the response. return response - def list( + def delete_instances( self, - request: Union[compute.ListInstanceGroupManagersRequest, dict] = None, + request: Union[compute.DeleteInstancesInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, + instance_group_manager: str = None, + instance_group_managers_delete_instances_request_resource: compute.InstanceGroupManagersDeleteInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves a list of managed instance groups that are - contained within the specified project and zone. + ) -> extended_operation.ExtendedOperation: + r"""Flags the specified instances in the managed instance + group for immediate deletion. The instances are also + removed from any target pools of which they were a + member. This method reduces the targetSize of the + managed instance group by the number of instances that + you delete. This operation is marked as DONE when the + action is scheduled even if the instances are still + being deleted. You must separately verify the status of + the deleting action with the listmanagedinstances + method. If the group is part of a backend service that + has enabled connection draining, it can take up to 60 + seconds after the connection draining duration has + elapsed before the VM instance is removed or deleted. + You can specify a maximum of 1000 instances with this + method per request. Args: - request (Union[google.cloud.compute_v1.types.ListInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstancesInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.List. See the method description - for details. + InstanceGroupManagers.DeleteInstances. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1486,24 +1644,41 @@ def list( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_delete_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersDeleteInstancesRequest): + The body resource for this request + This corresponds to the ``instance_group_managers_delete_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. timeout (float): The timeout for this request. metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.instance_group_managers.pagers.ListPager: - [Output Only] A list of managed instance groups. - - Iterating over this object will yield results and - resolve additional pages automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone]) + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_delete_instances_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1511,21 +1686,27 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListInstanceGroupManagersRequest. + # in a compute.DeleteInstancesInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListInstanceGroupManagersRequest): - request = compute.ListInstanceGroupManagersRequest(request) + if not isinstance(request, compute.DeleteInstancesInstanceGroupManagerRequest): + request = compute.DeleteInstancesInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_managers_delete_instances_request_resource is not None: + request.instance_group_managers_delete_instances_request_resource = ( + instance_group_managers_delete_instances_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.delete_instances] # Send the request. response = rpc( @@ -1535,38 +1716,56 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def list_errors( + def delete_per_instance_configs_unary( self, - request: Union[compute.ListErrorsInstanceGroupManagersRequest, dict] = None, + request: Union[ + compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict + ] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, + instance_group_managers_delete_per_instance_configs_req_resource: compute.InstanceGroupManagersDeletePerInstanceConfigsReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListErrorsPager: - r"""Lists all errors thrown by actions on instances for a - given managed instance group. The filter and orderBy - query parameters are not supported. + ) -> compute.Operation: + r"""Deletes selected per-instance configs for the managed + instance group. Args: - request (Union[google.cloud.compute_v1.types.ListErrorsInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.ListErrors. See the method - description for details. + InstanceGroupManagers.DeletePerInstanceConfigs. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1581,14 +1780,17 @@ def list_errors( on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - The name of the managed instance group. It must be a - string that meets the requirements in RFC1035, or an - unsigned long integer: must match regexp pattern: - (?:`a-z `__?)|1-9{0,19}. + The name of the managed instance + group. It should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instance_group_managers_delete_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersDeletePerInstanceConfigsReq): + The body resource for this request + This corresponds to the ``instance_group_managers_delete_per_instance_configs_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1596,16 +1798,22 @@ def list_errors( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.instance_group_managers.pagers.ListErrorsPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_group_manager]) + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_delete_per_instance_configs_req_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1613,11 +1821,15 @@ def list_errors( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListErrorsInstanceGroupManagersRequest. + # in a compute.DeletePerInstanceConfigsInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListErrorsInstanceGroupManagersRequest): - request = compute.ListErrorsInstanceGroupManagersRequest(request) + if not isinstance( + request, compute.DeletePerInstanceConfigsInstanceGroupManagerRequest + ): + request = compute.DeletePerInstanceConfigsInstanceGroupManagerRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1626,10 +1838,19 @@ def list_errors( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if ( + instance_group_managers_delete_per_instance_configs_req_resource + is not None + ): + request.instance_group_managers_delete_per_instance_configs_req_resource = ( + instance_group_managers_delete_per_instance_configs_req_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_errors] + rpc = self._transport._wrapped_methods[ + self._transport.delete_per_instance_configs + ] # Send the request. response = rpc( @@ -1639,44 +1860,30 @@ def list_errors( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListErrorsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def list_managed_instances( + def delete_per_instance_configs( self, request: Union[ - compute.ListManagedInstancesInstanceGroupManagersRequest, dict + compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict ] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, + instance_group_managers_delete_per_instance_configs_req_resource: compute.InstanceGroupManagersDeletePerInstanceConfigsReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListManagedInstancesPager: - r"""Lists all of the instances in the managed instance - group. Each instance in the list has a currentAction, - which indicates the action that the managed instance - group is performing on the instance. For example, if the - group is still creating an instance, the currentAction - is CREATING. If a previous action failed, the list - displays the errors for that failed action. The orderBy - query parameter is not supported. + ) -> extended_operation.ExtendedOperation: + r"""Deletes selected per-instance configs for the managed + instance group. Args: - request (Union[google.cloud.compute_v1.types.ListManagedInstancesInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.ListManagedInstances. See the + InstanceGroupManagers.DeletePerInstanceConfigs. See the method description for details. project (str): Project ID for this request. @@ -1685,18 +1892,24 @@ def list_managed_instances( should not be set. zone (str): The name of the zone where the - managed instance group is located. + managed instance group is located. It + should conform to RFC1035. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. + group. It should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instance_group_managers_delete_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersDeletePerInstanceConfigsReq): + The body resource for this request + This corresponds to the ``instance_group_managers_delete_per_instance_configs_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1704,16 +1917,1556 @@ def list_managed_instances( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.instance_group_managers.pagers.ListManagedInstancesPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_delete_per_instance_configs_req_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeletePerInstanceConfigsInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.DeletePerInstanceConfigsInstanceGroupManagerRequest + ): + request = compute.DeletePerInstanceConfigsInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if ( + instance_group_managers_delete_per_instance_configs_req_resource + is not None + ): + request.instance_group_managers_delete_per_instance_configs_req_resource = ( + instance_group_managers_delete_per_instance_configs_req_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.delete_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.InstanceGroupManager: + r"""Returns all of the details about the specified + managed instance group. Gets a list of available managed + instance groups by making a list() request. + + Args: + request (Union[google.cloud.compute_v1.types.GetInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.Get. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.InstanceGroupManager: + Represents a Managed Instance Group + resource. An instance group is a + collection of VM instances that you can + manage as a single entity. For more + information, read Instance groups. For + zonal Managed Instance Group, use the + instanceGroupManagers resource. For + regional Managed Instance Group, use the + regionInstanceGroupManagers resource. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetInstanceGroupManagerRequest): + request = compute.GetInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a managed instance group using the + information that you specify in the request. After the + group is created, instances in the group are created + using the specified instance template. This operation is + marked as DONE when the group is created even if the + instances in the group have not yet been created. You + must separately verify the status of the individual + instances with the listmanagedinstances method. A + managed instance group can have up to 1000 VM instances + per group. Please contact Cloud Support if you need an + increase in this limit. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where you want + to create the managed instance group. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_manager_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInstanceGroupManagerRequest): + request = compute.InsertInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a managed instance group using the + information that you specify in the request. After the + group is created, instances in the group are created + using the specified instance template. This operation is + marked as DONE when the group is created even if the + instances in the group have not yet been created. You + must separately verify the status of the individual + instances with the listmanagedinstances method. A + managed instance group can have up to 1000 VM instances + per group. Please contact Cloud Support if you need an + increase in this limit. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where you want + to create the managed instance group. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_manager_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInstanceGroupManagerRequest): + request = compute.InsertInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListInstanceGroupManagersRequest, dict] = None, + *, + project: str = None, + zone: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves a list of managed instance groups that are + contained within the specified project and zone. + + Args: + request (Union[google.cloud.compute_v1.types.ListInstanceGroupManagersRequest, dict]): + The request object. A request message for + InstanceGroupManagers.List. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.instance_group_managers.pagers.ListPager: + [Output Only] A list of managed instance groups. + + Iterating over this object will yield results and + resolve additional pages automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListInstanceGroupManagersRequest): + request = compute.ListInstanceGroupManagersRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_errors( + self, + request: Union[compute.ListErrorsInstanceGroupManagersRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListErrorsPager: + r"""Lists all errors thrown by actions on instances for a + given managed instance group. The filter and orderBy + query parameters are not supported. + + Args: + request (Union[google.cloud.compute_v1.types.ListErrorsInstanceGroupManagersRequest, dict]): + The request object. A request message for + InstanceGroupManagers.ListErrors. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. It + should conform to RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance group. It must be a + string that meets the requirements in RFC1035, or an + unsigned long integer: must match regexp pattern: + (?:`a-z `__?)|1-9{0,19}. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.instance_group_managers.pagers.ListErrorsPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListErrorsInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListErrorsInstanceGroupManagersRequest): + request = compute.ListErrorsInstanceGroupManagersRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_errors] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListErrorsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_managed_instances( + self, + request: Union[ + compute.ListManagedInstancesInstanceGroupManagersRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListManagedInstancesPager: + r"""Lists all of the instances in the managed instance + group. Each instance in the list has a currentAction, + which indicates the action that the managed instance + group is performing on the instance. For example, if the + group is still creating an instance, the currentAction + is CREATING. If a previous action failed, the list + displays the errors for that failed action. The orderBy + query parameter is not supported. + + Args: + request (Union[google.cloud.compute_v1.types.ListManagedInstancesInstanceGroupManagersRequest, dict]): + The request object. A request message for + InstanceGroupManagers.ListManagedInstances. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.instance_group_managers.pagers.ListManagedInstancesPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListManagedInstancesInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.ListManagedInstancesInstanceGroupManagersRequest + ): + request = compute.ListManagedInstancesInstanceGroupManagersRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_managed_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListManagedInstancesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_per_instance_configs( + self, + request: Union[ + compute.ListPerInstanceConfigsInstanceGroupManagersRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPerInstanceConfigsPager: + r"""Lists all of the per-instance configs defined for the + managed instance group. The orderBy query parameter is + not supported. + + Args: + request (Union[google.cloud.compute_v1.types.ListPerInstanceConfigsInstanceGroupManagersRequest, dict]): + The request object. A request message for + InstanceGroupManagers.ListPerInstanceConfigs. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. It + should conform to RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. It should conform to RFC1035. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.instance_group_managers.pagers.ListPerInstanceConfigsPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListPerInstanceConfigsInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.ListPerInstanceConfigsInstanceGroupManagersRequest + ): + request = compute.ListPerInstanceConfigsInstanceGroupManagersRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.list_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPerInstanceConfigsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Updates a managed instance group using the + information that you specify in the request. This + operation is marked as DONE when the group is patched + even if the instances in the group are still in the + process of being patched. You must separately verify the + status of the individual instances with the + listManagedInstances method. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. If you update your group to specify a + new template or instance configuration, it's possible + that your intended specification for each VM in the + group is different from the current state of that VM. To + learn how to apply an updated configuration to the VMs + in a MIG, see Updating instances in a MIG. + + Args: + request (Union[google.cloud.compute_v1.types.PatchInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.Patch. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where you want + to create the managed instance group. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the instance group + manager. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance_group_manager, instance_group_manager_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchInstanceGroupManagerRequest): + request = compute.PatchInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates a managed instance group using the + information that you specify in the request. This + operation is marked as DONE when the group is patched + even if the instances in the group are still in the + process of being patched. You must separately verify the + status of the individual instances with the + listManagedInstances method. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. If you update your group to specify a + new template or instance configuration, it's possible + that your intended specification for each VM in the + group is different from the current state of that VM. To + learn how to apply an updated configuration to the VMs + in a MIG, see Updating instances in a MIG. + + Args: + request (Union[google.cloud.compute_v1.types.PatchInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.Patch. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where you want + to create the managed instance group. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the instance group + manager. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance_group_manager, instance_group_manager_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchInstanceGroupManagerRequest): + request = compute.PatchInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def patch_per_instance_configs_unary( + self, + request: Union[ + compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_managers_patch_per_instance_configs_req_resource: compute.InstanceGroupManagersPatchPerInstanceConfigsReq = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Inserts or patches per-instance configs for the + managed instance group. perInstanceConfig.name serves as + a key used to distinguish whether to perform insert or + patch. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPerInstanceConfigsInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.PatchPerInstanceConfigs. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. It + should conform to RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. It should conform to RFC1035. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_patch_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersPatchPerInstanceConfigsReq): + The body resource for this request + This corresponds to the ``instance_group_managers_patch_per_instance_configs_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_patch_per_instance_configs_req_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPerInstanceConfigsInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.PatchPerInstanceConfigsInstanceGroupManagerRequest + ): + request = compute.PatchPerInstanceConfigsInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if ( + instance_group_managers_patch_per_instance_configs_req_resource + is not None + ): + request.instance_group_managers_patch_per_instance_configs_req_resource = ( + instance_group_managers_patch_per_instance_configs_req_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.patch_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_per_instance_configs( + self, + request: Union[ + compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_managers_patch_per_instance_configs_req_resource: compute.InstanceGroupManagersPatchPerInstanceConfigsReq = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Inserts or patches per-instance configs for the + managed instance group. perInstanceConfig.name serves as + a key used to distinguish whether to perform insert or + patch. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPerInstanceConfigsInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.PatchPerInstanceConfigs. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. It + should conform to RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. It should conform to RFC1035. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_patch_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersPatchPerInstanceConfigsReq): + The body resource for this request + This corresponds to the ``instance_group_managers_patch_per_instance_configs_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_patch_per_instance_configs_req_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPerInstanceConfigsInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.PatchPerInstanceConfigsInstanceGroupManagerRequest + ): + request = compute.PatchPerInstanceConfigsInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if ( + instance_group_managers_patch_per_instance_configs_req_resource + is not None + ): + request.instance_group_managers_patch_per_instance_configs_req_resource = ( + instance_group_managers_patch_per_instance_configs_req_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.patch_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def recreate_instances_unary( + self, + request: Union[ + compute.RecreateInstancesInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_managers_recreate_instances_request_resource: compute.InstanceGroupManagersRecreateInstancesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Flags the specified VM instances in the managed + instance group to be immediately recreated. Each + instance is recreated using the group's current + configuration. This operation is marked as DONE when the + flag is set even if the instances have not yet been + recreated. You must separately verify the status of each + instance by checking its currentAction field; for more + information, see Checking the status of managed + instances. If the group is part of a backend service + that has enabled connection draining, it can take up to + 60 seconds after the connection draining duration has + elapsed before the VM instance is removed or deleted. + You can specify a maximum of 1000 instances with this + method per request. + + Args: + request (Union[google.cloud.compute_v1.types.RecreateInstancesInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.RecreateInstances. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_recreate_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersRecreateInstancesRequest): + The body resource for this request + This corresponds to the ``instance_group_managers_recreate_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_recreate_instances_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RecreateInstancesInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.RecreateInstancesInstanceGroupManagerRequest + ): + request = compute.RecreateInstancesInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_managers_recreate_instances_request_resource is not None: + request.instance_group_managers_recreate_instances_request_resource = ( + instance_group_managers_recreate_instances_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.recreate_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def recreate_instances( + self, + request: Union[ + compute.RecreateInstancesInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + instance_group_manager: str = None, + instance_group_managers_recreate_instances_request_resource: compute.InstanceGroupManagersRecreateInstancesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Flags the specified VM instances in the managed + instance group to be immediately recreated. Each + instance is recreated using the group's current + configuration. This operation is marked as DONE when the + flag is set even if the instances have not yet been + recreated. You must separately verify the status of each + instance by checking its currentAction field; for more + information, see Checking the status of managed + instances. If the group is part of a backend service + that has enabled connection draining, it can take up to + 60 seconds after the connection draining duration has + elapsed before the VM instance is removed or deleted. + You can specify a maximum of 1000 instances with this + method per request. + + Args: + request (Union[google.cloud.compute_v1.types.RecreateInstancesInstanceGroupManagerRequest, dict]): + The request object. A request message for + InstanceGroupManagers.RecreateInstances. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + managed instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_managers_recreate_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersRecreateInstancesRequest): + The body resource for this request + This corresponds to the ``instance_group_managers_recreate_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_group_manager]) + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_recreate_instances_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1721,13 +3474,13 @@ def list_managed_instances( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListManagedInstancesInstanceGroupManagersRequest. + # in a compute.RecreateInstancesInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.ListManagedInstancesInstanceGroupManagersRequest + request, compute.RecreateInstancesInstanceGroupManagerRequest ): - request = compute.ListManagedInstancesInstanceGroupManagersRequest(request) + request = compute.RecreateInstancesInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1736,10 +3489,14 @@ def list_managed_instances( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if instance_group_managers_recreate_instances_request_resource is not None: + request.instance_group_managers_recreate_instances_request_resource = ( + instance_group_managers_recreate_instances_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_managed_instances] + rpc = self._transport._wrapped_methods[self._transport.recreate_instances] # Send the request. response = rpc( @@ -1749,40 +3506,72 @@ def list_managed_instances( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListManagedInstancesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def list_per_instance_configs( + def resize_unary( self, - request: Union[ - compute.ListPerInstanceConfigsInstanceGroupManagersRequest, dict - ] = None, + request: Union[compute.ResizeInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, + size: int = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPerInstanceConfigsPager: - r"""Lists all of the per-instance configs defined for the - managed instance group. The orderBy query parameter is - not supported. + ) -> compute.Operation: + r"""Resizes the managed instance group. If you increase + the size, the group creates new instances using the + current instance template. If you decrease the size, the + group deletes instances. The resize operation is marked + DONE when the resize actions are scheduled even if the + group has not yet added or deleted any instances. You + must separately verify the status of the creating or + deleting actions with the listmanagedinstances method. + When resizing down, the instance group arbitrarily + chooses the order in which VMs are deleted. The group + takes into account some VM attributes when making the + selection including: + The status of the VM instance. + + The health of the VM instance. + The instance template + version the VM is based on. + For regional managed + instance groups, the location of the VM instance. This + list is subject to change. If the group is part of a + backend service that has enabled connection draining, it + can take up to 60 seconds after the connection draining + duration has elapsed before the VM instance is removed + or deleted. Args: - request (Union[google.cloud.compute_v1.types.ListPerInstanceConfigsInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.ResizeInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.ListPerInstanceConfigs. See the - method description for details. + InstanceGroupManagers.Resize. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1790,19 +3579,29 @@ def list_per_instance_configs( should not be set. zone (str): The name of the zone where the - managed instance group is located. It - should conform to RFC1035. + managed instance group is located. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. It should conform to RFC1035. + group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + size (int): + The number of running instances that + the managed instance group should + maintain at any given time. The group + automatically adds or removes instances + to maintain the number of instances + specified by this parameter. + + This corresponds to the ``size`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1810,16 +3609,15 @@ def list_per_instance_configs( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.instance_group_managers.pagers.ListPerInstanceConfigsPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_group_manager]) + has_flattened_params = any([project, zone, instance_group_manager, size]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1827,15 +3625,11 @@ def list_per_instance_configs( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListPerInstanceConfigsInstanceGroupManagersRequest. + # in a compute.ResizeInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.ListPerInstanceConfigsInstanceGroupManagersRequest - ): - request = compute.ListPerInstanceConfigsInstanceGroupManagersRequest( - request - ) + if not isinstance(request, compute.ResizeInstanceGroupManagerRequest): + request = compute.ResizeInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1844,12 +3638,12 @@ def list_per_instance_configs( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if size is not None: + request.size = size # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.list_per_instance_configs - ] + rpc = self._transport._wrapped_methods[self._transport.resize] # Send the request. response = rpc( @@ -1859,49 +3653,46 @@ def list_per_instance_configs( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPerInstanceConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def patch_unary( + def resize( self, - request: Union[compute.PatchInstanceGroupManagerRequest, dict] = None, + request: Union[compute.ResizeInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_manager_resource: compute.InstanceGroupManager = None, + size: int = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Updates a managed instance group using the - information that you specify in the request. This - operation is marked as DONE when the group is patched - even if the instances in the group are still in the - process of being patched. You must separately verify the - status of the individual instances with the - listManagedInstances method. This method supports PATCH - semantics and uses the JSON merge patch format and - processing rules. If you update your group to specify a - new template or instance configuration, it's possible - that your intended specification for each VM in the - group is different from the current state of that VM. To - learn how to apply an updated configuration to the VMs - in a MIG, see Updating instances in a MIG. + ) -> extended_operation.ExtendedOperation: + r"""Resizes the managed instance group. If you increase + the size, the group creates new instances using the + current instance template. If you decrease the size, the + group deletes instances. The resize operation is marked + DONE when the resize actions are scheduled even if the + group has not yet added or deleted any instances. You + must separately verify the status of the creating or + deleting actions with the listmanagedinstances method. + When resizing down, the instance group arbitrarily + chooses the order in which VMs are deleted. The group + takes into account some VM attributes when making the + selection including: + The status of the VM instance. + + The health of the VM instance. + The instance template + version the VM is based on. + For regional managed + instance groups, the location of the VM instance. This + list is subject to change. If the group is part of a + backend service that has enabled connection draining, it + can take up to 60 seconds after the connection draining + duration has elapsed before the VM instance is removed + or deleted. Args: - request (Union[google.cloud.compute_v1.types.PatchInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.ResizeInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.Patch. See the method description + InstanceGroupManagers.Resize. See the method description for details. project (str): Project ID for this request. @@ -1909,22 +3700,28 @@ def patch_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. zone (str): - The name of the zone where you want - to create the managed instance group. + The name of the zone where the + managed instance group is located. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - The name of the instance group - manager. + The name of the managed instance + group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): - The body resource for this request - This corresponds to the ``instance_group_manager_resource`` field + size (int): + The number of running instances that + the managed instance group should + maintain at any given time. The group + automatically adds or removes instances + to maintain the number of instances + specified by this parameter. + + This corresponds to the ``size`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1934,30 +3731,15 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, instance_group_manager, instance_group_manager_resource] - ) + has_flattened_params = any([project, zone, instance_group_manager, size]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1965,11 +3747,11 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchInstanceGroupManagerRequest. + # in a compute.ResizeInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchInstanceGroupManagerRequest): - request = compute.PatchInstanceGroupManagerRequest(request) + if not isinstance(request, compute.ResizeInstanceGroupManagerRequest): + request = compute.ResizeInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1978,14 +3760,12 @@ def patch_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if instance_group_manager_resource is not None: - request.instance_group_manager_resource = ( - instance_group_manager_resource - ) + if size is not None: + request.size = size # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.resize] # Send the request. response = rpc( @@ -1995,32 +3775,58 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def patch_per_instance_configs_unary( + def set_instance_template_unary( self, request: Union[ - compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, dict + compute.SetInstanceTemplateInstanceGroupManagerRequest, dict ] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_patch_per_instance_configs_req_resource: compute.InstanceGroupManagersPatchPerInstanceConfigsReq = None, + instance_group_managers_set_instance_template_request_resource: compute.InstanceGroupManagersSetInstanceTemplateRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Inserts or patches per-instance configs for the - managed instance group. perInstanceConfig.name serves as - a key used to distinguish whether to perform insert or - patch. + r"""Specifies the instance template to use when creating + new instances in this group. The templates for existing + instances in the group do not change unless you run + recreateInstances, run applyUpdatesToInstances, or set + the group's updatePolicy.type to PROACTIVE. Args: - request (Union[google.cloud.compute_v1.types.PatchPerInstanceConfigsInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetInstanceTemplateInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.PatchPerInstanceConfigs. See the + InstanceGroupManagers.SetInstanceTemplate. See the method description for details. project (str): Project ID for this request. @@ -2029,22 +3835,21 @@ def patch_per_instance_configs_unary( should not be set. zone (str): The name of the zone where the - managed instance group is located. It - should conform to RFC1035. + managed instance group is located. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. It should conform to RFC1035. + group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_patch_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersPatchPerInstanceConfigsReq): + instance_group_managers_set_instance_template_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersSetInstanceTemplateRequest): The body resource for this request - This corresponds to the ``instance_group_managers_patch_per_instance_configs_req_resource`` field + This corresponds to the ``instance_group_managers_set_instance_template_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2054,22 +3859,9 @@ def patch_per_instance_configs_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2080,7 +3872,7 @@ def patch_per_instance_configs_unary( project, zone, instance_group_manager, - instance_group_managers_patch_per_instance_configs_req_resource, + instance_group_managers_set_instance_template_request_resource, ] ) if request is not None and has_flattened_params: @@ -2090,15 +3882,13 @@ def patch_per_instance_configs_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchPerInstanceConfigsInstanceGroupManagerRequest. + # in a compute.SetInstanceTemplateInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.PatchPerInstanceConfigsInstanceGroupManagerRequest + request, compute.SetInstanceTemplateInstanceGroupManagerRequest ): - request = compute.PatchPerInstanceConfigsInstanceGroupManagerRequest( - request - ) + request = compute.SetInstanceTemplateInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2108,18 +3898,16 @@ def patch_per_instance_configs_unary( if instance_group_manager is not None: request.instance_group_manager = instance_group_manager if ( - instance_group_managers_patch_per_instance_configs_req_resource + instance_group_managers_set_instance_template_request_resource is not None ): - request.instance_group_managers_patch_per_instance_configs_req_resource = ( - instance_group_managers_patch_per_instance_configs_req_resource + request.instance_group_managers_set_instance_template_request_resource = ( + instance_group_managers_set_instance_template_request_resource ) # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.patch_per_instance_configs - ] + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_instance_template] # Send the request. response = rpc( @@ -2132,40 +3920,31 @@ def patch_per_instance_configs_unary( # Done; return the response. return response - def recreate_instances_unary( + def set_instance_template( self, request: Union[ - compute.RecreateInstancesInstanceGroupManagerRequest, dict + compute.SetInstanceTemplateInstanceGroupManagerRequest, dict ] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_recreate_instances_request_resource: compute.InstanceGroupManagersRecreateInstancesRequest = None, + instance_group_managers_set_instance_template_request_resource: compute.InstanceGroupManagersSetInstanceTemplateRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Flags the specified VM instances in the managed - instance group to be immediately recreated. Each - instance is recreated using the group's current - configuration. This operation is marked as DONE when the - flag is set even if the instances have not yet been - recreated. You must separately verify the status of each - instance by checking its currentAction field; for more - information, see Checking the status of managed - instances. If the group is part of a backend service - that has enabled connection draining, it can take up to - 60 seconds after the connection draining duration has - elapsed before the VM instance is removed or deleted. - You can specify a maximum of 1000 instances with this - method per request. + ) -> extended_operation.ExtendedOperation: + r"""Specifies the instance template to use when creating + new instances in this group. The templates for existing + instances in the group do not change unless you run + recreateInstances, run applyUpdatesToInstances, or set + the group's updatePolicy.type to PROACTIVE. Args: - request (Union[google.cloud.compute_v1.types.RecreateInstancesInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetInstanceTemplateInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.RecreateInstances. See the method - description for details. + InstanceGroupManagers.SetInstanceTemplate. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2185,9 +3964,9 @@ def recreate_instances_unary( This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_recreate_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersRecreateInstancesRequest): + instance_group_managers_set_instance_template_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersSetInstanceTemplateRequest): The body resource for this request - This corresponds to the ``instance_group_managers_recreate_instances_request_resource`` field + This corresponds to the ``instance_group_managers_set_instance_template_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2197,22 +3976,9 @@ def recreate_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2223,7 +3989,7 @@ def recreate_instances_unary( project, zone, instance_group_manager, - instance_group_managers_recreate_instances_request_resource, + instance_group_managers_set_instance_template_request_resource, ] ) if request is not None and has_flattened_params: @@ -2233,13 +3999,13 @@ def recreate_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RecreateInstancesInstanceGroupManagerRequest. + # in a compute.SetInstanceTemplateInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.RecreateInstancesInstanceGroupManagerRequest + request, compute.SetInstanceTemplateInstanceGroupManagerRequest ): - request = compute.RecreateInstancesInstanceGroupManagerRequest(request) + request = compute.SetInstanceTemplateInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2248,14 +4014,17 @@ def recreate_instances_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if instance_group_managers_recreate_instances_request_resource is not None: - request.instance_group_managers_recreate_instances_request_resource = ( - instance_group_managers_recreate_instances_request_resource + if ( + instance_group_managers_set_instance_template_request_resource + is not None + ): + request.instance_group_managers_set_instance_template_request_resource = ( + instance_group_managers_set_instance_template_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.recreate_instances] + rpc = self._transport._wrapped_methods[self._transport.set_instance_template] # Send the request. response = rpc( @@ -2265,47 +4034,60 @@ def recreate_instances_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def resize_unary( + def set_target_pools_unary( self, - request: Union[compute.ResizeInstanceGroupManagerRequest, dict] = None, + request: Union[compute.SetTargetPoolsInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - size: int = None, + instance_group_managers_set_target_pools_request_resource: compute.InstanceGroupManagersSetTargetPoolsRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Resizes the managed instance group. If you increase - the size, the group creates new instances using the - current instance template. If you decrease the size, the - group deletes instances. The resize operation is marked - DONE when the resize actions are scheduled even if the - group has not yet added or deleted any instances. You - must separately verify the status of the creating or - deleting actions with the listmanagedinstances method. - When resizing down, the instance group arbitrarily - chooses the order in which VMs are deleted. The group - takes into account some VM attributes when making the - selection including: + The status of the VM instance. + - The health of the VM instance. + The instance template - version the VM is based on. + For regional managed - instance groups, the location of the VM instance. This - list is subject to change. If the group is part of a - backend service that has enabled connection draining, it - can take up to 60 seconds after the connection draining - duration has elapsed before the VM instance is removed - or deleted. + r"""Modifies the target pools to which all instances in + this managed instance group are assigned. The target + pools automatically apply to all of the instances in the + managed instance group. This operation is marked DONE + when you make the request even if the instances have not + yet been added to their target pools. The change might + take some time to apply to all of the instances in the + group depending on the size of the group. Args: - request (Union[google.cloud.compute_v1.types.ResizeInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetTargetPoolsInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.Resize. See the method description - for details. + InstanceGroupManagers.SetTargetPools. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2325,15 +4107,9 @@ def resize_unary( This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - size (int): - The number of running instances that - the managed instance group should - maintain at any given time. The group - automatically adds or removes instances - to maintain the number of instances - specified by this parameter. - - This corresponds to the ``size`` field + instance_group_managers_set_target_pools_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersSetTargetPoolsRequest): + The body resource for this request + This corresponds to the ``instance_group_managers_set_target_pools_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2343,28 +4119,22 @@ def resize_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_group_manager, size]) + has_flattened_params = any( + [ + project, + zone, + instance_group_manager, + instance_group_managers_set_target_pools_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2372,11 +4142,11 @@ def resize_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ResizeInstanceGroupManagerRequest. + # in a compute.SetTargetPoolsInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ResizeInstanceGroupManagerRequest): - request = compute.ResizeInstanceGroupManagerRequest(request) + if not isinstance(request, compute.SetTargetPoolsInstanceGroupManagerRequest): + request = compute.SetTargetPoolsInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2385,12 +4155,14 @@ def resize_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if size is not None: - request.size = size + if instance_group_managers_set_target_pools_request_resource is not None: + request.instance_group_managers_set_target_pools_request_resource = ( + instance_group_managers_set_target_pools_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.resize] + rpc = self._transport._wrapped_methods[self._transport.set_target_pools] # Send the request. response = rpc( @@ -2403,31 +4175,32 @@ def resize_unary( # Done; return the response. return response - def set_instance_template_unary( + def set_target_pools( self, - request: Union[ - compute.SetInstanceTemplateInstanceGroupManagerRequest, dict - ] = None, + request: Union[compute.SetTargetPoolsInstanceGroupManagerRequest, dict] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_set_instance_template_request_resource: compute.InstanceGroupManagersSetInstanceTemplateRequest = None, + instance_group_managers_set_target_pools_request_resource: compute.InstanceGroupManagersSetTargetPoolsRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Specifies the instance template to use when creating - new instances in this group. The templates for existing - instances in the group do not change unless you run - recreateInstances, run applyUpdatesToInstances, or set - the group's updatePolicy.type to PROACTIVE. + ) -> extended_operation.ExtendedOperation: + r"""Modifies the target pools to which all instances in + this managed instance group are assigned. The target + pools automatically apply to all of the instances in the + managed instance group. This operation is marked DONE + when you make the request even if the instances have not + yet been added to their target pools. The change might + take some time to apply to all of the instances in the + group depending on the size of the group. Args: - request (Union[google.cloud.compute_v1.types.SetInstanceTemplateInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetTargetPoolsInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.SetInstanceTemplate. See the - method description for details. + InstanceGroupManagers.SetTargetPools. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2447,9 +4220,9 @@ def set_instance_template_unary( This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_set_instance_template_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersSetInstanceTemplateRequest): + instance_group_managers_set_target_pools_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersSetTargetPoolsRequest): The body resource for this request - This corresponds to the ``instance_group_managers_set_instance_template_request_resource`` field + This corresponds to the ``instance_group_managers_set_target_pools_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2459,22 +4232,9 @@ def set_instance_template_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2485,7 +4245,7 @@ def set_instance_template_unary( project, zone, instance_group_manager, - instance_group_managers_set_instance_template_request_resource, + instance_group_managers_set_target_pools_request_resource, ] ) if request is not None and has_flattened_params: @@ -2495,13 +4255,11 @@ def set_instance_template_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetInstanceTemplateInstanceGroupManagerRequest. + # in a compute.SetTargetPoolsInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.SetInstanceTemplateInstanceGroupManagerRequest - ): - request = compute.SetInstanceTemplateInstanceGroupManagerRequest(request) + if not isinstance(request, compute.SetTargetPoolsInstanceGroupManagerRequest): + request = compute.SetTargetPoolsInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2510,17 +4268,14 @@ def set_instance_template_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if ( - instance_group_managers_set_instance_template_request_resource - is not None - ): - request.instance_group_managers_set_instance_template_request_resource = ( - instance_group_managers_set_instance_template_request_resource + if instance_group_managers_set_target_pools_request_resource is not None: + request.instance_group_managers_set_target_pools_request_resource = ( + instance_group_managers_set_target_pools_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_instance_template] + rpc = self._transport._wrapped_methods[self._transport.set_target_pools] # Send the request. response = rpc( @@ -2530,35 +4285,58 @@ def set_instance_template_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_target_pools_unary( + def update_per_instance_configs_unary( self, - request: Union[compute.SetTargetPoolsInstanceGroupManagerRequest, dict] = None, + request: Union[ + compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest, dict + ] = None, *, project: str = None, zone: str = None, instance_group_manager: str = None, - instance_group_managers_set_target_pools_request_resource: compute.InstanceGroupManagersSetTargetPoolsRequest = None, + instance_group_managers_update_per_instance_configs_req_resource: compute.InstanceGroupManagersUpdatePerInstanceConfigsReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Modifies the target pools to which all instances in - this managed instance group are assigned. The target - pools automatically apply to all of the instances in the - managed instance group. This operation is marked DONE - when you make the request even if the instances have not - yet been added to their target pools. The change might - take some time to apply to all of the instances in the - group depending on the size of the group. + r"""Inserts or updates per-instance configs for the + managed instance group. perInstanceConfig.name serves as + a key used to distinguish whether to perform insert or + patch. Args: - request (Union[google.cloud.compute_v1.types.SetTargetPoolsInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdatePerInstanceConfigsInstanceGroupManagerRequest, dict]): The request object. A request message for - InstanceGroupManagers.SetTargetPools. See the method - description for details. + InstanceGroupManagers.UpdatePerInstanceConfigs. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2566,21 +4344,22 @@ def set_target_pools_unary( should not be set. zone (str): The name of the zone where the - managed instance group is located. + managed instance group is located. It + should conform to RFC1035. This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. + group. It should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_managers_set_target_pools_request_resource (google.cloud.compute_v1.types.InstanceGroupManagersSetTargetPoolsRequest): + instance_group_managers_update_per_instance_configs_req_resource (google.cloud.compute_v1.types.InstanceGroupManagersUpdatePerInstanceConfigsReq): The body resource for this request - This corresponds to the ``instance_group_managers_set_target_pools_request_resource`` field + This corresponds to the ``instance_group_managers_update_per_instance_configs_req_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2590,22 +4369,9 @@ def set_target_pools_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2616,7 +4382,7 @@ def set_target_pools_unary( project, zone, instance_group_manager, - instance_group_managers_set_target_pools_request_resource, + instance_group_managers_update_per_instance_configs_req_resource, ] ) if request is not None and has_flattened_params: @@ -2626,11 +4392,15 @@ def set_target_pools_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetTargetPoolsInstanceGroupManagerRequest. + # in a compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetTargetPoolsInstanceGroupManagerRequest): - request = compute.SetTargetPoolsInstanceGroupManagerRequest(request) + if not isinstance( + request, compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest + ): + request = compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2639,14 +4409,19 @@ def set_target_pools_unary( request.zone = zone if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if instance_group_managers_set_target_pools_request_resource is not None: - request.instance_group_managers_set_target_pools_request_resource = ( - instance_group_managers_set_target_pools_request_resource + if ( + instance_group_managers_update_per_instance_configs_req_resource + is not None + ): + request.instance_group_managers_update_per_instance_configs_req_resource = ( + instance_group_managers_update_per_instance_configs_req_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_target_pools] + rpc = self._transport._wrapped_methods[ + self._transport.update_per_instance_configs + ] # Send the request. response = rpc( @@ -2659,7 +4434,7 @@ def set_target_pools_unary( # Done; return the response. return response - def update_per_instance_configs_unary( + def update_per_instance_configs( self, request: Union[ compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest, dict @@ -2672,7 +4447,7 @@ def update_per_instance_configs_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Inserts or updates per-instance configs for the managed instance group. perInstanceConfig.name serves as a key used to distinguish whether to perform insert or @@ -2715,22 +4490,9 @@ def update_per_instance_configs_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2790,6 +4552,31 @@ def update_per_instance_configs_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/instance_group_managers/transports/base.py b/google/cloud/compute_v1/services/instance_group_managers/transports/base.py index 5875032a6..7022a3a58 100644 --- a/google/cloud/compute_v1/services/instance_group_managers/transports/base.py +++ b/google/cloud/compute_v1/services/instance_group_managers/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -429,5 +432,21 @@ def update_per_instance_configs( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("InstanceGroupManagersTransport",) diff --git a/google/cloud/compute_v1/services/instance_group_managers/transports/rest.py b/google/cloud/compute_v1/services/instance_group_managers/transports/rest.py index b40cb5154..330871b28 100644 --- a/google/cloud/compute_v1/services/instance_group_managers/transports/rest.py +++ b/google/cloud/compute_v1/services/instance_group_managers/transports/rest.py @@ -3299,6 +3299,10 @@ def update_per_instance_configs( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/instance_groups/client.py b/google/cloud/compute_v1/services/instance_groups/client.py index 12f29ab85..f329665c5 100644 --- a/google/cloud/compute_v1/services/instance_groups/client.py +++ b/google/cloud/compute_v1/services/instance_groups/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.instance_groups import pagers from google.cloud.compute_v1.types import compute from .transports.base import InstanceGroupsTransport, DEFAULT_CLIENT_INFO @@ -455,22 +458,9 @@ def add_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -524,6 +514,140 @@ def add_instances_unary( # Done; return the response. return response + def add_instances( + self, + request: Union[compute.AddInstancesInstanceGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group: str = None, + instance_groups_add_instances_request_resource: compute.InstanceGroupsAddInstancesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds a list of instances to the specified instance + group. All of the instances in the instance group must + be in the same network/subnetwork. Read Adding instances + for more information. + + Args: + request (Union[google.cloud.compute_v1.types.AddInstancesInstanceGroupRequest, dict]): + The request object. A request message for + InstanceGroups.AddInstances. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group (str): + The name of the instance group where + you are adding instances. + + This corresponds to the ``instance_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_groups_add_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupsAddInstancesRequest): + The body resource for this request + This corresponds to the ``instance_groups_add_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group, + instance_groups_add_instances_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddInstancesInstanceGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddInstancesInstanceGroupRequest): + request = compute.AddInstancesInstanceGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group is not None: + request.instance_group = instance_group + if instance_groups_add_instances_request_resource is not None: + request.instance_groups_add_instances_request_resource = ( + instance_groups_add_instances_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def aggregated_list( self, request: Union[compute.AggregatedListInstanceGroupsRequest, dict] = None, @@ -651,22 +775,101 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteInstanceGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteInstanceGroupRequest): + request = compute.DeleteInstanceGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group is not None: + request.instance_group = instance_group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteInstanceGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified instance group. The instances + in the group are not deleted. Note that instance group + must not belong to a backend service. Read Deleting an + instance group for more information. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteInstanceGroupRequest, dict]): + The request object. A request message for + InstanceGroups.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group (str): + The name of the instance group to + delete. + + This corresponds to the ``instance_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -706,6 +909,31 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -855,22 +1083,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -913,6 +1128,119 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertInstanceGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group_resource: compute.InstanceGroup = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an instance group in the specified project + using the parameters that are included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInstanceGroupRequest, dict]): + The request object. A request message for + InstanceGroups.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where you want + to create the instance group. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_resource (google.cloud.compute_v1.types.InstanceGroup): + The body resource for this request + This corresponds to the ``instance_group_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_group_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInstanceGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInstanceGroupRequest): + request = compute.InsertInstanceGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group_resource is not None: + request.instance_group_resource = instance_group_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListInstanceGroupsRequest, dict] = None, @@ -1179,22 +1507,9 @@ def remove_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1248,6 +1563,142 @@ def remove_instances_unary( # Done; return the response. return response + def remove_instances( + self, + request: Union[compute.RemoveInstancesInstanceGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group: str = None, + instance_groups_remove_instances_request_resource: compute.InstanceGroupsRemoveInstancesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Removes one or more instances from the specified + instance group, but does not delete those instances. If + the group is part of a backend service that has enabled + connection draining, it can take up to 60 seconds after + the connection draining duration before the VM instance + is removed or deleted. + + Args: + request (Union[google.cloud.compute_v1.types.RemoveInstancesInstanceGroupRequest, dict]): + The request object. A request message for + InstanceGroups.RemoveInstances. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group (str): + The name of the instance group where + the specified instances will be removed. + + This corresponds to the ``instance_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_groups_remove_instances_request_resource (google.cloud.compute_v1.types.InstanceGroupsRemoveInstancesRequest): + The body resource for this request + This corresponds to the ``instance_groups_remove_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group, + instance_groups_remove_instances_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RemoveInstancesInstanceGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.RemoveInstancesInstanceGroupRequest): + request = compute.RemoveInstancesInstanceGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group is not None: + request.instance_group = instance_group + if instance_groups_remove_instances_request_resource is not None: + request.instance_groups_remove_instances_request_resource = ( + instance_groups_remove_instances_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.remove_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_named_ports_unary( self, request: Union[compute.SetNamedPortsInstanceGroupRequest, dict] = None, @@ -1299,22 +1750,9 @@ def set_named_ports_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1368,6 +1806,138 @@ def set_named_ports_unary( # Done; return the response. return response + def set_named_ports( + self, + request: Union[compute.SetNamedPortsInstanceGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_group: str = None, + instance_groups_set_named_ports_request_resource: compute.InstanceGroupsSetNamedPortsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the named ports for the specified instance + group. + + Args: + request (Union[google.cloud.compute_v1.types.SetNamedPortsInstanceGroupRequest, dict]): + The request object. A request message for + InstanceGroups.SetNamedPorts. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + instance group is located. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group (str): + The name of the instance group where + the named ports are updated. + + This corresponds to the ``instance_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_groups_set_named_ports_request_resource (google.cloud.compute_v1.types.InstanceGroupsSetNamedPortsRequest): + The body resource for this request + This corresponds to the ``instance_groups_set_named_ports_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance_group, + instance_groups_set_named_ports_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetNamedPortsInstanceGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetNamedPortsInstanceGroupRequest): + request = compute.SetNamedPortsInstanceGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_group is not None: + request.instance_group = instance_group + if instance_groups_set_named_ports_request_resource is not None: + request.instance_groups_set_named_ports_request_resource = ( + instance_groups_set_named_ports_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_named_ports] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/instance_groups/transports/base.py b/google/cloud/compute_v1/services/instance_groups/transports/base.py index 7d87a9179..c9b937038 100644 --- a/google/cloud/compute_v1/services/instance_groups/transports/base.py +++ b/google/cloud/compute_v1/services/instance_groups/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -266,5 +269,21 @@ def set_named_ports( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("InstanceGroupsTransport",) diff --git a/google/cloud/compute_v1/services/instance_groups/transports/rest.py b/google/cloud/compute_v1/services/instance_groups/transports/rest.py index 301aa9c06..79c1cd451 100644 --- a/google/cloud/compute_v1/services/instance_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/instance_groups/transports/rest.py @@ -1494,6 +1494,10 @@ def set_named_ports( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/instance_templates/client.py b/google/cloud/compute_v1/services/instance_templates/client.py index 521808fbe..362e6ac39 100644 --- a/google/cloud/compute_v1/services/instance_templates/client.py +++ b/google/cloud/compute_v1/services/instance_templates/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.instance_templates import pagers from google.cloud.compute_v1.types import compute from .transports.base import InstanceTemplatesTransport, DEFAULT_CLIENT_INFO @@ -441,22 +444,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -497,6 +487,112 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteInstanceTemplateRequest, dict] = None, + *, + project: str = None, + instance_template: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified instance template. Deleting an + instance template is permanent and cannot be undone. It + is not possible to delete templates that are already in + use by a managed instance group. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteInstanceTemplateRequest, dict]): + The request object. A request message for + InstanceTemplates.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_template (str): + The name of the instance template to + delete. + + This corresponds to the ``instance_template`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, instance_template]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteInstanceTemplateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteInstanceTemplateRequest): + request = compute.DeleteInstanceTemplateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if instance_template is not None: + request.instance_template = instance_template + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetInstanceTemplateRequest, dict] = None, @@ -736,22 +832,91 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, instance_template_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInstanceTemplateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInstanceTemplateRequest): + request = compute.InsertInstanceTemplateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if instance_template_resource is not None: + request.instance_template_resource = instance_template_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertInstanceTemplateRequest, dict] = None, + *, + project: str = None, + instance_template_resource: compute.InstanceTemplate = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an instance template in the specified project + using the data that is included in the request. If you + are creating a new template to update an existing + instance group, your new instance template must use the + same network or, if applicable, the same subnetwork as + the original template. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInstanceTemplateRequest, dict]): + The request object. A request message for + InstanceTemplates.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_template_resource (google.cloud.compute_v1.types.InstanceTemplate): + The body resource for this request + This corresponds to the ``instance_template_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -789,6 +954,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/instance_templates/transports/base.py b/google/cloud/compute_v1/services/instance_templates/transports/base.py index a90c3e2d4..a7cc83059 100644 --- a/google/cloud/compute_v1/services/instance_templates/transports/base.py +++ b/google/cloud/compute_v1/services/instance_templates/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -234,5 +237,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("InstanceTemplatesTransport",) diff --git a/google/cloud/compute_v1/services/instance_templates/transports/rest.py b/google/cloud/compute_v1/services/instance_templates/transports/rest.py index d6255478b..e9406817b 100644 --- a/google/cloud/compute_v1/services/instance_templates/transports/rest.py +++ b/google/cloud/compute_v1/services/instance_templates/transports/rest.py @@ -1245,6 +1245,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/instances/client.py b/google/cloud/compute_v1/services/instances/client.py index 7efeea920..a21eb7da2 100644 --- a/google/cloud/compute_v1/services/instances/client.py +++ b/google/cloud/compute_v1/services/instances/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.instances import pagers from google.cloud.compute_v1.types import compute from .transports.base import InstancesTransport, DEFAULT_CLIENT_INFO @@ -457,22 +460,9 @@ def add_access_config_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -521,6 +511,139 @@ def add_access_config_unary( # Done; return the response. return response + def add_access_config( + self, + request: Union[compute.AddAccessConfigInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + network_interface: str = None, + access_config_resource: compute.AccessConfig = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds an access config to an instance's network + interface. + + Args: + request (Union[google.cloud.compute_v1.types.AddAccessConfigInstanceRequest, dict]): + The request object. A request message for + Instances.AddAccessConfig. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_interface (str): + The name of the network interface to + add to this instance. + + This corresponds to the ``network_interface`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + access_config_resource (google.cloud.compute_v1.types.AccessConfig): + The body resource for this request + This corresponds to the ``access_config_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, network_interface, access_config_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddAccessConfigInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddAccessConfigInstanceRequest): + request = compute.AddAccessConfigInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if network_interface is not None: + request.network_interface = network_interface + if access_config_resource is not None: + request.access_config_resource = access_config_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_access_config] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def add_resource_policies_unary( self, request: Union[compute.AddResourcePoliciesInstanceRequest, dict] = None, @@ -571,22 +694,110 @@ def add_resource_policies_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_add_resource_policies_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddResourcePoliciesInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddResourcePoliciesInstanceRequest): + request = compute.AddResourcePoliciesInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_add_resource_policies_request_resource is not None: + request.instances_add_resource_policies_request_resource = ( + instances_add_resource_policies_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_resource_policies] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def add_resource_policies( + self, + request: Union[compute.AddResourcePoliciesInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_add_resource_policies_request_resource: compute.InstancesAddResourcePoliciesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds existing resource policies to an instance. You + can only add one policy right now which will be applied + to this instance for scheduling live migrations. + + Args: + request (Union[google.cloud.compute_v1.types.AddResourcePoliciesInstanceRequest, dict]): + The request object. A request message for + Instances.AddResourcePolicies. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_add_resource_policies_request_resource (google.cloud.compute_v1.types.InstancesAddResourcePoliciesRequest): + The body resource for this request + This corresponds to the ``instances_add_resource_policies_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -632,6 +843,31 @@ def add_resource_policies_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -770,22 +1006,9 @@ def attach_disk_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -830,24 +1053,28 @@ def attach_disk_unary( # Done; return the response. return response - def bulk_insert_unary( + def attach_disk( self, - request: Union[compute.BulkInsertInstanceRequest, dict] = None, + request: Union[compute.AttachDiskInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - bulk_insert_instance_resource_resource: compute.BulkInsertInstanceResource = None, + instance: str = None, + attached_disk_resource: compute.AttachedDisk = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates multiple instances. Count specifies the - number of instances to create. + ) -> extended_operation.ExtendedOperation: + r"""Attaches an existing Disk resource to an instance. + You must first create the disk before you can attach it. + It is not possible to create and attach a disk at the + same time. For more information, read Adding a + persistent disk to your instance. Args: - request (Union[google.cloud.compute_v1.types.BulkInsertInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.AttachDiskInstanceRequest, dict]): The request object. A request message for - Instances.BulkInsert. See the method description for + Instances.AttachDisk. See the method description for details. project (str): Project ID for this request. @@ -861,9 +1088,14 @@ def bulk_insert_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - bulk_insert_instance_resource_resource (google.cloud.compute_v1.types.BulkInsertInstanceResource): + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + attached_disk_resource (google.cloud.compute_v1.types.AttachedDisk): The body resource for this request - This corresponds to the ``bulk_insert_instance_resource_resource`` field + This corresponds to the ``attached_disk_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -873,30 +1105,15 @@ def bulk_insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, bulk_insert_instance_resource_resource] - ) + has_flattened_params = any([project, zone, instance, attached_disk_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -904,25 +1121,25 @@ def bulk_insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.BulkInsertInstanceRequest. + # in a compute.AttachDiskInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.BulkInsertInstanceRequest): - request = compute.BulkInsertInstanceRequest(request) + if not isinstance(request, compute.AttachDiskInstanceRequest): + request = compute.AttachDiskInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if bulk_insert_instance_resource_resource is not None: - request.bulk_insert_instance_resource_resource = ( - bulk_insert_instance_resource_resource - ) + if instance is not None: + request.instance = instance + if attached_disk_resource is not None: + request.attached_disk_resource = attached_disk_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.bulk_insert] + rpc = self._transport._wrapped_methods[self._transport.attach_disk] # Send the request. response = rpc( @@ -932,27 +1149,52 @@ def bulk_insert_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def delete_unary( + def bulk_insert_unary( self, - request: Union[compute.DeleteInstanceRequest, dict] = None, + request: Union[compute.BulkInsertInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - instance: str = None, + bulk_insert_instance_resource_resource: compute.BulkInsertInstanceResource = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Deletes the specified Instance resource. For more - information, see Deleting an instance. + r"""Creates multiple instances. Count specifies the + number of instances to create. Args: - request (Union[google.cloud.compute_v1.types.DeleteInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.BulkInsertInstanceRequest, dict]): The request object. A request message for - Instances.Delete. See the method description for + Instances.BulkInsert. See the method description for details. project (str): Project ID for this request. @@ -966,11 +1208,9 @@ def delete_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance (str): - Name of the instance resource to - delete. - - This corresponds to the ``instance`` field + bulk_insert_instance_resource_resource (google.cloud.compute_v1.types.BulkInsertInstanceResource): + The body resource for this request + This corresponds to the ``bulk_insert_instance_resource_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -980,28 +1220,17 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, bulk_insert_instance_resource_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1009,23 +1238,25 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteInstanceRequest. + # in a compute.BulkInsertInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteInstanceRequest): - request = compute.DeleteInstanceRequest(request) + if not isinstance(request, compute.BulkInsertInstanceRequest): + request = compute.BulkInsertInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if instance is not None: - request.instance = instance + if bulk_insert_instance_resource_resource is not None: + request.bulk_insert_instance_resource_resource = ( + bulk_insert_instance_resource_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.bulk_insert] # Send the request. response = rpc( @@ -1038,27 +1269,25 @@ def delete_unary( # Done; return the response. return response - def delete_access_config_unary( + def bulk_insert( self, - request: Union[compute.DeleteAccessConfigInstanceRequest, dict] = None, + request: Union[compute.BulkInsertInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - instance: str = None, - access_config: str = None, - network_interface: str = None, + bulk_insert_instance_resource_resource: compute.BulkInsertInstanceResource = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes an access config from an instance's network - interface. + ) -> extended_operation.ExtendedOperation: + r"""Creates multiple instances. Count specifies the + number of instances to create. Args: - request (Union[google.cloud.compute_v1.types.DeleteAccessConfigInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.BulkInsertInstanceRequest, dict]): The request object. A request message for - Instances.DeleteAccessConfig. See the method description - for details. + Instances.BulkInsert. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1071,21 +1300,9 @@ def delete_access_config_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance (str): - The instance name for this request. - This corresponds to the ``instance`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - access_config (str): - The name of the access config to - delete. - - This corresponds to the ``access_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - network_interface (str): - The name of the network interface. - This corresponds to the ``network_interface`` field + bulk_insert_instance_resource_resource (google.cloud.compute_v1.types.BulkInsertInstanceResource): + The body resource for this request + This corresponds to the ``bulk_insert_instance_resource_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1095,29 +1312,16 @@ def delete_access_config_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, zone, instance, access_config, network_interface] + [project, zone, bulk_insert_instance_resource_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -1126,27 +1330,25 @@ def delete_access_config_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteAccessConfigInstanceRequest. + # in a compute.BulkInsertInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteAccessConfigInstanceRequest): - request = compute.DeleteAccessConfigInstanceRequest(request) + if not isinstance(request, compute.BulkInsertInstanceRequest): + request = compute.BulkInsertInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if instance is not None: - request.instance = instance - if access_config is not None: - request.access_config = access_config - if network_interface is not None: - request.network_interface = network_interface + if bulk_insert_instance_resource_resource is not None: + request.bulk_insert_instance_resource_resource = ( + bulk_insert_instance_resource_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_access_config] + rpc = self._transport._wrapped_methods[self._transport.bulk_insert] # Send the request. response = rpc( @@ -1156,27 +1358,52 @@ def delete_access_config_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def detach_disk_unary( + def delete_unary( self, - request: Union[compute.DetachDiskInstanceRequest, dict] = None, + request: Union[compute.DeleteInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - device_name: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Detaches a disk from an instance. + r"""Deletes the specified Instance resource. For more + information, see Deleting an instance. Args: - request (Union[google.cloud.compute_v1.types.DetachDiskInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstanceRequest, dict]): The request object. A request message for - Instances.DetachDisk. See the method description for + Instances.Delete. See the method description for details. project (str): Project ID for this request. @@ -1191,17 +1418,10 @@ def detach_disk_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Instance name for this request. - This corresponds to the ``instance`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - device_name (str): - The device name of the disk to - detach. Make a get() request on the - instance to view currently attached - disks and device names. + Name of the instance resource to + delete. - This corresponds to the ``device_name`` field + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1211,28 +1431,15 @@ def detach_disk_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, device_name]) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1240,11 +1447,11 @@ def detach_disk_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DetachDiskInstanceRequest. + # in a compute.DeleteInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DetachDiskInstanceRequest): - request = compute.DetachDiskInstanceRequest(request) + if not isinstance(request, compute.DeleteInstanceRequest): + request = compute.DeleteInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1253,12 +1460,10 @@ def detach_disk_unary( request.zone = zone if instance is not None: request.instance = instance - if device_name is not None: - request.device_name = device_name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.detach_disk] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1271,9 +1476,9 @@ def detach_disk_unary( # Done; return the response. return response - def get( + def delete( self, - request: Union[compute.GetInstanceRequest, dict] = None, + request: Union[compute.DeleteInstanceRequest, dict] = None, *, project: str = None, zone: str = None, @@ -1281,14 +1486,15 @@ def get( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Instance: - r"""Returns the specified Instance resource. Gets a list - of available instances by making a list() request. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified Instance resource. For more + information, see Deleting an instance. Args: - request (Union[google.cloud.compute_v1.types.GetInstanceRequest, dict]): - The request object. A request message for Instances.Get. - See the method description for details. + request (Union[google.cloud.compute_v1.types.DeleteInstanceRequest, dict]): + The request object. A request message for + Instances.Delete. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1303,7 +1509,7 @@ def get( should not be set. instance (str): Name of the instance resource to - return. + delete. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this @@ -1315,12 +1521,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Instance: - Represents an Instance resource. An - instance is a virtual machine that is - hosted on Google Cloud Platform. For - more information, read Virtual Machine - Instances. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1334,11 +1537,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetInstanceRequest. + # in a compute.DeleteInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetInstanceRequest): - request = compute.GetInstanceRequest(request) + if not isinstance(request, compute.DeleteInstanceRequest): + request = compute.DeleteInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1350,7 +1553,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1360,29 +1563,55 @@ def get( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_effective_firewalls( + def delete_access_config_unary( self, - request: Union[compute.GetEffectiveFirewallsInstanceRequest, dict] = None, + request: Union[compute.DeleteAccessConfigInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + access_config: str = None, network_interface: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.InstancesGetEffectiveFirewallsResponse: - r"""Returns effective firewalls applied to an interface - of the instance. + ) -> compute.Operation: + r"""Deletes an access config from an instance's network + interface. Args: - request (Union[google.cloud.compute_v1.types.GetEffectiveFirewallsInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteAccessConfigInstanceRequest, dict]): The request object. A request message for - Instances.GetEffectiveFirewalls. See the method - description for details. + Instances.DeleteAccessConfig. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1396,16 +1625,19 @@ def get_effective_firewalls( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. - + The instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - network_interface (str): - The name of the network interface to - get the effective firewalls. + access_config (str): + The name of the access config to + delete. + This corresponds to the ``access_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_interface (str): + The name of the network interface. This corresponds to the ``network_interface`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -1416,13 +1648,17 @@ def get_effective_firewalls( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.InstancesGetEffectiveFirewallsResponse: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, network_interface]) + has_flattened_params = any( + [project, zone, instance, access_config, network_interface] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1430,11 +1666,11 @@ def get_effective_firewalls( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetEffectiveFirewallsInstanceRequest. + # in a compute.DeleteAccessConfigInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetEffectiveFirewallsInstanceRequest): - request = compute.GetEffectiveFirewallsInstanceRequest(request) + if not isinstance(request, compute.DeleteAccessConfigInstanceRequest): + request = compute.DeleteAccessConfigInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1443,12 +1679,14 @@ def get_effective_firewalls( request.zone = zone if instance is not None: request.instance = instance + if access_config is not None: + request.access_config = access_config if network_interface is not None: request.network_interface = network_interface # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_effective_firewalls] + rpc = self._transport._wrapped_methods[self._transport.delete_access_config] # Send the request. response = rpc( @@ -1461,23 +1699,26 @@ def get_effective_firewalls( # Done; return the response. return response - def get_guest_attributes( + def delete_access_config( self, - request: Union[compute.GetGuestAttributesInstanceRequest, dict] = None, + request: Union[compute.DeleteAccessConfigInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + access_config: str = None, + network_interface: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.GuestAttributes: - r"""Returns the specified guest attributes entry. + ) -> extended_operation.ExtendedOperation: + r"""Deletes an access config from an instance's network + interface. Args: - request (Union[google.cloud.compute_v1.types.GetGuestAttributesInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteAccessConfigInstanceRequest, dict]): The request object. A request message for - Instances.GetGuestAttributes. See the method description + Instances.DeleteAccessConfig. See the method description for details. project (str): Project ID for this request. @@ -1492,12 +1733,22 @@ def get_guest_attributes( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. - + The instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + access_config (str): + The name of the access config to + delete. + + This corresponds to the ``access_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_interface (str): + The name of the network interface. + This corresponds to the ``network_interface`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1505,13 +1756,17 @@ def get_guest_attributes( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.GuestAttributes: - A guest attributes entry. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, instance, access_config, network_interface] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1519,11 +1774,11 @@ def get_guest_attributes( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetGuestAttributesInstanceRequest. + # in a compute.DeleteAccessConfigInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetGuestAttributesInstanceRequest): - request = compute.GetGuestAttributesInstanceRequest(request) + if not isinstance(request, compute.DeleteAccessConfigInstanceRequest): + request = compute.DeleteAccessConfigInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1532,10 +1787,14 @@ def get_guest_attributes( request.zone = zone if instance is not None: request.instance = instance + if access_config is not None: + request.access_config = access_config + if network_interface is not None: + request.network_interface = network_interface # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_guest_attributes] + rpc = self._transport._wrapped_methods[self._transport.delete_access_config] # Send the request. response = rpc( @@ -1545,27 +1804,52 @@ def get_guest_attributes( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_iam_policy( + def detach_disk_unary( self, - request: Union[compute.GetIamPolicyInstanceRequest, dict] = None, + request: Union[compute.DetachDiskInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - resource: str = None, + instance: str = None, + device_name: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Gets the access control policy for a resource. May be - empty if no such policy or resource exists. + ) -> compute.Operation: + r"""Detaches a disk from an instance. Args: - request (Union[google.cloud.compute_v1.types.GetIamPolicyInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DetachDiskInstanceRequest, dict]): The request object. A request message for - Instances.GetIamPolicy. See the method description for + Instances.DetachDisk. See the method description for details. project (str): Project ID for this request. @@ -1579,11 +1863,18 @@ def get_iam_policy( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this - request. + instance (str): + Instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + device_name (str): + The device name of the disk to + detach. Make a get() request on the + instance to view currently attached + disks and device names. - This corresponds to the ``resource`` field + This corresponds to the ``device_name`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1593,53 +1884,15 @@ def get_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, - see the [IAM - documentation](\ https://cloud.google.com/iam/docs/). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, resource]) + has_flattened_params = any([project, zone, instance, device_name]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1647,23 +1900,25 @@ def get_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetIamPolicyInstanceRequest. + # in a compute.DetachDiskInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetIamPolicyInstanceRequest): - request = compute.GetIamPolicyInstanceRequest(request) + if not isinstance(request, compute.DetachDiskInstanceRequest): + request = compute.DetachDiskInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if resource is not None: - request.resource = resource + if instance is not None: + request.instance = instance + if device_name is not None: + request.device_name = device_name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + rpc = self._transport._wrapped_methods[self._transport.detach_disk] # Send the request. response = rpc( @@ -1676,23 +1931,24 @@ def get_iam_policy( # Done; return the response. return response - def get_screenshot( + def detach_disk( self, - request: Union[compute.GetScreenshotInstanceRequest, dict] = None, + request: Union[compute.DetachDiskInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + device_name: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Screenshot: - r"""Returns the screenshot from the specified instance. + ) -> extended_operation.ExtendedOperation: + r"""Detaches a disk from an instance. Args: - request (Union[google.cloud.compute_v1.types.GetScreenshotInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.DetachDiskInstanceRequest, dict]): The request object. A request message for - Instances.GetScreenshot. See the method description for + Instances.DetachDisk. See the method description for details. project (str): Project ID for this request. @@ -1707,12 +1963,19 @@ def get_screenshot( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. - + Instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + device_name (str): + The device name of the disk to + detach. Make a get() request on the + instance to view currently attached + disks and device names. + + This corresponds to the ``device_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1720,13 +1983,15 @@ def get_screenshot( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Screenshot: - An instance's screenshot. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any([project, zone, instance, device_name]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1734,11 +1999,11 @@ def get_screenshot( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetScreenshotInstanceRequest. + # in a compute.DetachDiskInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetScreenshotInstanceRequest): - request = compute.GetScreenshotInstanceRequest(request) + if not isinstance(request, compute.DetachDiskInstanceRequest): + request = compute.DetachDiskInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1747,10 +2012,12 @@ def get_screenshot( request.zone = zone if instance is not None: request.instance = instance + if device_name is not None: + request.device_name = device_name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_screenshot] + rpc = self._transport._wrapped_methods[self._transport.detach_disk] # Send the request. response = rpc( @@ -1760,12 +2027,37 @@ def get_screenshot( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_serial_port_output( + def get( self, - request: Union[compute.GetSerialPortOutputInstanceRequest, dict] = None, + request: Union[compute.GetInstanceRequest, dict] = None, *, project: str = None, zone: str = None, @@ -1773,15 +2065,14 @@ def get_serial_port_output( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.SerialPortOutput: - r"""Returns the last 1 MB of serial port output from the - specified instance. + ) -> compute.Instance: + r"""Returns the specified Instance resource. Gets a list + of available instances by making a list() request. Args: - request (Union[google.cloud.compute_v1.types.GetSerialPortOutputInstanceRequest, dict]): - The request object. A request message for - Instances.GetSerialPortOutput. See the method - description for details. + request (Union[google.cloud.compute_v1.types.GetInstanceRequest, dict]): + The request object. A request message for Instances.Get. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1795,8 +2086,8 @@ def get_serial_port_output( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance for this - request. + Name of the instance resource to + return. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this @@ -1808,8 +2099,13 @@ def get_serial_port_output( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.SerialPortOutput: - An instance serial console output. + google.cloud.compute_v1.types.Instance: + Represents an Instance resource. An + instance is a virtual machine that is + hosted on Google Cloud Platform. For + more information, read Virtual Machine + Instances. + """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have @@ -1822,11 +2118,11 @@ def get_serial_port_output( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetSerialPortOutputInstanceRequest. + # in a compute.GetInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetSerialPortOutputInstanceRequest): - request = compute.GetSerialPortOutputInstanceRequest(request) + if not isinstance(request, compute.GetInstanceRequest): + request = compute.GetInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1838,7 +2134,7 @@ def get_serial_port_output( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_serial_port_output] + rpc = self._transport._wrapped_methods[self._transport.get] # Send the request. response = rpc( @@ -1851,23 +2147,25 @@ def get_serial_port_output( # Done; return the response. return response - def get_shielded_instance_identity( + def get_effective_firewalls( self, - request: Union[compute.GetShieldedInstanceIdentityInstanceRequest, dict] = None, + request: Union[compute.GetEffectiveFirewallsInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + network_interface: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.ShieldedInstanceIdentity: - r"""Returns the Shielded Instance Identity of an instance + ) -> compute.InstancesGetEffectiveFirewallsResponse: + r"""Returns effective firewalls applied to an interface + of the instance. Args: - request (Union[google.cloud.compute_v1.types.GetShieldedInstanceIdentityInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.GetEffectiveFirewallsInstanceRequest, dict]): The request object. A request message for - Instances.GetShieldedInstanceIdentity. See the method + Instances.GetEffectiveFirewalls. See the method description for details. project (str): Project ID for this request. @@ -1882,12 +2180,19 @@ def get_shielded_instance_identity( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name or id of the instance scoping - this request. + Name of the instance scoping this + request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + network_interface (str): + The name of the network interface to + get the effective firewalls. + + This corresponds to the ``network_interface`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1895,13 +2200,13 @@ def get_shielded_instance_identity( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.ShieldedInstanceIdentity: - A Shielded Instance Identity. + google.cloud.compute_v1.types.InstancesGetEffectiveFirewallsResponse: + """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any([project, zone, instance, network_interface]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1909,11 +2214,11 @@ def get_shielded_instance_identity( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetShieldedInstanceIdentityInstanceRequest. + # in a compute.GetEffectiveFirewallsInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetShieldedInstanceIdentityInstanceRequest): - request = compute.GetShieldedInstanceIdentityInstanceRequest(request) + if not isinstance(request, compute.GetEffectiveFirewallsInstanceRequest): + request = compute.GetEffectiveFirewallsInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1922,12 +2227,12 @@ def get_shielded_instance_identity( request.zone = zone if instance is not None: request.instance = instance + if network_interface is not None: + request.network_interface = network_interface # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.get_shielded_instance_identity - ] + rpc = self._transport._wrapped_methods[self._transport.get_effective_firewalls] # Send the request. response = rpc( @@ -1940,25 +2245,24 @@ def get_shielded_instance_identity( # Done; return the response. return response - def insert_unary( + def get_guest_attributes( self, - request: Union[compute.InsertInstanceRequest, dict] = None, + request: Union[compute.GetGuestAttributesInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - instance_resource: compute.Instance = None, + instance: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates an instance resource in the specified project - using the data included in the request. + ) -> compute.GuestAttributes: + r"""Returns the specified guest attributes entry. Args: - request (Union[google.cloud.compute_v1.types.InsertInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.GetGuestAttributesInstanceRequest, dict]): The request object. A request message for - Instances.Insert. See the method description for - details. + Instances.GetGuestAttributes. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1971,9 +2275,3233 @@ def insert_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_resource (google.cloud.compute_v1.types.Instance): - The body resource for this request - This corresponds to the ``instance_resource`` field + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.GuestAttributes: + A guest attributes entry. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetGuestAttributesInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetGuestAttributesInstanceRequest): + request = compute.GetGuestAttributesInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_guest_attributes] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Gets the access control policy for a resource. May be + empty if no such policy or resource exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetIamPolicyInstanceRequest, dict]): + The request object. A request message for + Instances.GetIamPolicy. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, + see the [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetIamPolicyInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyInstanceRequest): + request = compute.GetIamPolicyInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_screenshot( + self, + request: Union[compute.GetScreenshotInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Screenshot: + r"""Returns the screenshot from the specified instance. + + Args: + request (Union[google.cloud.compute_v1.types.GetScreenshotInstanceRequest, dict]): + The request object. A request message for + Instances.GetScreenshot. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Screenshot: + An instance's screenshot. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetScreenshotInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetScreenshotInstanceRequest): + request = compute.GetScreenshotInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_screenshot] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_serial_port_output( + self, + request: Union[compute.GetSerialPortOutputInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SerialPortOutput: + r"""Returns the last 1 MB of serial port output from the + specified instance. + + Args: + request (Union[google.cloud.compute_v1.types.GetSerialPortOutputInstanceRequest, dict]): + The request object. A request message for + Instances.GetSerialPortOutput. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance for this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.SerialPortOutput: + An instance serial console output. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetSerialPortOutputInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetSerialPortOutputInstanceRequest): + request = compute.GetSerialPortOutputInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_serial_port_output] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_shielded_instance_identity( + self, + request: Union[compute.GetShieldedInstanceIdentityInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.ShieldedInstanceIdentity: + r"""Returns the Shielded Instance Identity of an instance + + Args: + request (Union[google.cloud.compute_v1.types.GetShieldedInstanceIdentityInstanceRequest, dict]): + The request object. A request message for + Instances.GetShieldedInstanceIdentity. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name or id of the instance scoping + this request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.ShieldedInstanceIdentity: + A Shielded Instance Identity. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetShieldedInstanceIdentityInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetShieldedInstanceIdentityInstanceRequest): + request = compute.GetShieldedInstanceIdentityInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.get_shielded_instance_identity + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_resource: compute.Instance = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates an instance resource in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInstanceRequest, dict]): + The request object. A request message for + Instances.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_resource (google.cloud.compute_v1.types.Instance): + The body resource for this request + This corresponds to the ``instance_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInstanceRequest): + request = compute.InsertInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_resource is not None: + request.instance_resource = instance_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance_resource: compute.Instance = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an instance resource in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInstanceRequest, dict]): + The request object. A request message for + Instances.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_resource (google.cloud.compute_v1.types.Instance): + The body resource for this request + This corresponds to the ``instance_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInstanceRequest): + request = compute.InsertInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance_resource is not None: + request.instance_resource = instance_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListInstancesRequest, dict] = None, + *, + project: str = None, + zone: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves the list of instances contained within the + specified zone. + + Args: + request (Union[google.cloud.compute_v1.types.ListInstancesRequest, dict]): + The request object. A request message for + Instances.List. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.instances.pagers.ListPager: + Contains a list of instances. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListInstancesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListInstancesRequest): + request = compute.ListInstancesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_referrers( + self, + request: Union[compute.ListReferrersInstancesRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListReferrersPager: + r"""Retrieves a list of resources that refer to the VM + instance specified in the request. For example, if the + VM instance is part of a managed or unmanaged instance + group, the referrers list includes the instance group. + For more information, read Viewing referrers to VM + instances. + + Args: + request (Union[google.cloud.compute_v1.types.ListReferrersInstancesRequest, dict]): + The request object. A request message for + Instances.ListReferrers. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the target instance scoping + this request, or '-' if the request + should span over all instances in the + container. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.instances.pagers.ListReferrersPager: + Contains a list of instance + referrers. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListReferrersInstancesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListReferrersInstancesRequest): + request = compute.ListReferrersInstancesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_referrers] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListReferrersPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def remove_resource_policies_unary( + self, + request: Union[compute.RemoveResourcePoliciesInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_remove_resource_policies_request_resource: compute.InstancesRemoveResourcePoliciesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Removes resource policies from an instance. + + Args: + request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesInstanceRequest, dict]): + The request object. A request message for + Instances.RemoveResourcePolicies. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_remove_resource_policies_request_resource (google.cloud.compute_v1.types.InstancesRemoveResourcePoliciesRequest): + The body resource for this request + This corresponds to the ``instances_remove_resource_policies_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance, + instances_remove_resource_policies_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RemoveResourcePoliciesInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.RemoveResourcePoliciesInstanceRequest): + request = compute.RemoveResourcePoliciesInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_remove_resource_policies_request_resource is not None: + request.instances_remove_resource_policies_request_resource = ( + instances_remove_resource_policies_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def remove_resource_policies( + self, + request: Union[compute.RemoveResourcePoliciesInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_remove_resource_policies_request_resource: compute.InstancesRemoveResourcePoliciesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Removes resource policies from an instance. + + Args: + request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesInstanceRequest, dict]): + The request object. A request message for + Instances.RemoveResourcePolicies. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_remove_resource_policies_request_resource (google.cloud.compute_v1.types.InstancesRemoveResourcePoliciesRequest): + The body resource for this request + This corresponds to the ``instances_remove_resource_policies_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + instance, + instances_remove_resource_policies_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RemoveResourcePoliciesInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.RemoveResourcePoliciesInstanceRequest): + request = compute.RemoveResourcePoliciesInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_remove_resource_policies_request_resource is not None: + request.instances_remove_resource_policies_request_resource = ( + instances_remove_resource_policies_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def reset_unary( + self, + request: Union[compute.ResetInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Performs a reset on the instance. This is a hard + reset. The VM does not do a graceful shutdown. For more + information, see Resetting an instance. + + Args: + request (Union[google.cloud.compute_v1.types.ResetInstanceRequest, dict]): + The request object. A request message for + Instances.Reset. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResetInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResetInstanceRequest): + request = compute.ResetInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.reset] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def reset( + self, + request: Union[compute.ResetInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Performs a reset on the instance. This is a hard + reset. The VM does not do a graceful shutdown. For more + information, see Resetting an instance. + + Args: + request (Union[google.cloud.compute_v1.types.ResetInstanceRequest, dict]): + The request object. A request message for + Instances.Reset. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResetInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResetInstanceRequest): + request = compute.ResetInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.reset] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def resume_unary( + self, + request: Union[compute.ResumeInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Resumes an instance that was suspended using the + instances().suspend method. + + Args: + request (Union[google.cloud.compute_v1.types.ResumeInstanceRequest, dict]): + The request object. A request message for + Instances.Resume. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance resource to + resume. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResumeInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResumeInstanceRequest): + request = compute.ResumeInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.resume] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def resume( + self, + request: Union[compute.ResumeInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Resumes an instance that was suspended using the + instances().suspend method. + + Args: + request (Union[google.cloud.compute_v1.types.ResumeInstanceRequest, dict]): + The request object. A request message for + Instances.Resume. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance resource to + resume. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResumeInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResumeInstanceRequest): + request = compute.ResumeInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.resume] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def send_diagnostic_interrupt( + self, + request: Union[compute.SendDiagnosticInterruptInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SendDiagnosticInterruptInstanceResponse: + r"""Sends diagnostic interrupt to the instance. + + Args: + request (Union[google.cloud.compute_v1.types.SendDiagnosticInterruptInstanceRequest, dict]): + The request object. A request message for + Instances.SendDiagnosticInterrupt. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.SendDiagnosticInterruptInstanceResponse: + A response message for + Instances.SendDiagnosticInterrupt. See + the method description for details. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SendDiagnosticInterruptInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SendDiagnosticInterruptInstanceRequest): + request = compute.SendDiagnosticInterruptInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.send_diagnostic_interrupt + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_deletion_protection_unary( + self, + request: Union[compute.SetDeletionProtectionInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Sets deletion protection on the instance. + + Args: + request (Union[google.cloud.compute_v1.types.SetDeletionProtectionInstanceRequest, dict]): + The request object. A request message for + Instances.SetDeletionProtection. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetDeletionProtectionInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetDeletionProtectionInstanceRequest): + request = compute.SetDeletionProtectionInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_deletion_protection] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_deletion_protection( + self, + request: Union[compute.SetDeletionProtectionInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets deletion protection on the instance. + + Args: + request (Union[google.cloud.compute_v1.types.SetDeletionProtectionInstanceRequest, dict]): + The request object. A request message for + Instances.SetDeletionProtection. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetDeletionProtectionInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetDeletionProtectionInstanceRequest): + request = compute.SetDeletionProtectionInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_deletion_protection] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_disk_auto_delete_unary( + self, + request: Union[compute.SetDiskAutoDeleteInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + auto_delete: bool = None, + device_name: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Sets the auto-delete flag for a disk attached to an + instance. + + Args: + request (Union[google.cloud.compute_v1.types.SetDiskAutoDeleteInstanceRequest, dict]): + The request object. A request message for + Instances.SetDiskAutoDelete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + auto_delete (bool): + Whether to auto-delete the disk when + the instance is deleted. + + This corresponds to the ``auto_delete`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + device_name (str): + The device name of the disk to + modify. Make a get() request on the + instance to view currently attached + disks and device names. + + This corresponds to the ``device_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance, auto_delete, device_name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetDiskAutoDeleteInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetDiskAutoDeleteInstanceRequest): + request = compute.SetDiskAutoDeleteInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if auto_delete is not None: + request.auto_delete = auto_delete + if device_name is not None: + request.device_name = device_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_disk_auto_delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_disk_auto_delete( + self, + request: Union[compute.SetDiskAutoDeleteInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + auto_delete: bool = None, + device_name: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the auto-delete flag for a disk attached to an + instance. + + Args: + request (Union[google.cloud.compute_v1.types.SetDiskAutoDeleteInstanceRequest, dict]): + The request object. A request message for + Instances.SetDiskAutoDelete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + The instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + auto_delete (bool): + Whether to auto-delete the disk when + the instance is deleted. + + This corresponds to the ``auto_delete`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + device_name (str): + The device name of the disk to + modify. Make a get() request on the + instance to view currently attached + disks and device names. + + This corresponds to the ``device_name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance, auto_delete, device_name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetDiskAutoDeleteInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetDiskAutoDeleteInstanceRequest): + request = compute.SetDiskAutoDeleteInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if auto_delete is not None: + request.auto_delete = auto_delete + if device_name is not None: + request.device_name = device_name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_disk_auto_delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_iam_policy( + self, + request: Union[compute.SetIamPolicyInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + resource: str = None, + zone_set_policy_request_resource: compute.ZoneSetPolicyRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Sets the access control policy on the specified + resource. Replaces any existing policy. + + Args: + request (Union[google.cloud.compute_v1.types.SetIamPolicyInstanceRequest, dict]): + The request object. A request message for + Instances.SetIamPolicy. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone_set_policy_request_resource (google.cloud.compute_v1.types.ZoneSetPolicyRequest): + The body resource for this request + This corresponds to the ``zone_set_policy_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, + see the [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, resource, zone_set_policy_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetIamPolicyInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetIamPolicyInstanceRequest): + request = compute.SetIamPolicyInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if resource is not None: + request.resource = resource + if zone_set_policy_request_resource is not None: + request.zone_set_policy_request_resource = ( + zone_set_policy_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_labels_unary( + self, + request: Union[compute.SetLabelsInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_labels_request_resource: compute.InstancesSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Sets labels on an instance. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsInstanceRequest, dict]): + The request object. A request message for + Instances.SetLabels. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_labels_request_resource (google.cloud.compute_v1.types.InstancesSetLabelsRequest): + The body resource for this request + This corresponds to the ``instances_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsInstanceRequest): + request = compute.SetLabelsInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_labels_request_resource is not None: + request.instances_set_labels_request_resource = ( + instances_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_labels( + self, + request: Union[compute.SetLabelsInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_labels_request_resource: compute.InstancesSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets labels on an instance. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsInstanceRequest, dict]): + The request object. A request message for + Instances.SetLabels. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_labels_request_resource (google.cloud.compute_v1.types.InstancesSetLabelsRequest): + The body resource for this request + This corresponds to the ``instances_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsInstanceRequest): + request = compute.SetLabelsInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_labels_request_resource is not None: + request.instances_set_labels_request_resource = ( + instances_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_machine_resources_unary( + self, + request: Union[compute.SetMachineResourcesInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_machine_resources_request_resource: compute.InstancesSetMachineResourcesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Changes the number and/or type of accelerator for a + stopped instance to the values specified in the request. + + Args: + request (Union[google.cloud.compute_v1.types.SetMachineResourcesInstanceRequest, dict]): + The request object. A request message for + Instances.SetMachineResources. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_machine_resources_request_resource (google.cloud.compute_v1.types.InstancesSetMachineResourcesRequest): + The body resource for this request + This corresponds to the ``instances_set_machine_resources_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_machine_resources_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMachineResourcesInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMachineResourcesInstanceRequest): + request = compute.SetMachineResourcesInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_machine_resources_request_resource is not None: + request.instances_set_machine_resources_request_resource = ( + instances_set_machine_resources_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_machine_resources] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_machine_resources( + self, + request: Union[compute.SetMachineResourcesInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_machine_resources_request_resource: compute.InstancesSetMachineResourcesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the number and/or type of accelerator for a + stopped instance to the values specified in the request. + + Args: + request (Union[google.cloud.compute_v1.types.SetMachineResourcesInstanceRequest, dict]): + The request object. A request message for + Instances.SetMachineResources. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_machine_resources_request_resource (google.cloud.compute_v1.types.InstancesSetMachineResourcesRequest): + The body resource for this request + This corresponds to the ``instances_set_machine_resources_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_machine_resources_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMachineResourcesInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMachineResourcesInstanceRequest): + request = compute.SetMachineResourcesInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_machine_resources_request_resource is not None: + request.instances_set_machine_resources_request_resource = ( + instances_set_machine_resources_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_machine_resources] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_machine_type_unary( + self, + request: Union[compute.SetMachineTypeInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_machine_type_request_resource: compute.InstancesSetMachineTypeRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Changes the machine type for a stopped instance to + the machine type specified in the request. + + Args: + request (Union[google.cloud.compute_v1.types.SetMachineTypeInstanceRequest, dict]): + The request object. A request message for + Instances.SetMachineType. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_machine_type_request_resource (google.cloud.compute_v1.types.InstancesSetMachineTypeRequest): + The body resource for this request + This corresponds to the ``instances_set_machine_type_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_machine_type_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMachineTypeInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMachineTypeInstanceRequest): + request = compute.SetMachineTypeInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_machine_type_request_resource is not None: + request.instances_set_machine_type_request_resource = ( + instances_set_machine_type_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_machine_type] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_machine_type( + self, + request: Union[compute.SetMachineTypeInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_machine_type_request_resource: compute.InstancesSetMachineTypeRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the machine type for a stopped instance to + the machine type specified in the request. + + Args: + request (Union[google.cloud.compute_v1.types.SetMachineTypeInstanceRequest, dict]): + The request object. A request message for + Instances.SetMachineType. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_machine_type_request_resource (google.cloud.compute_v1.types.InstancesSetMachineTypeRequest): + The body resource for this request + This corresponds to the ``instances_set_machine_type_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_machine_type_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMachineTypeInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMachineTypeInstanceRequest): + request = compute.SetMachineTypeInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_machine_type_request_resource is not None: + request.instances_set_machine_type_request_resource = ( + instances_set_machine_type_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_machine_type] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_metadata_unary( + self, + request: Union[compute.SetMetadataInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + metadata_resource: compute.Metadata = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Sets metadata for the specified instance to the data + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.SetMetadataInstanceRequest, dict]): + The request object. A request message for + Instances.SetMetadata. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + metadata_resource (google.cloud.compute_v1.types.Metadata): + The body resource for this request + This corresponds to the ``metadata_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance, metadata_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMetadataInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMetadataInstanceRequest): + request = compute.SetMetadataInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if metadata_resource is not None: + request.metadata_resource = metadata_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_metadata] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_metadata( + self, + request: Union[compute.SetMetadataInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + metadata_resource: compute.Metadata = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets metadata for the specified instance to the data + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.SetMetadataInstanceRequest, dict]): + The request object. A request message for + Instances.SetMetadata. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + metadata_resource (google.cloud.compute_v1.types.Metadata): + The body resource for this request + This corresponds to the ``metadata_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, instance, metadata_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMetadataInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMetadataInstanceRequest): + request = compute.SetMetadataInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if metadata_resource is not None: + request.metadata_resource = metadata_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_metadata] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_min_cpu_platform_unary( + self, + request: Union[compute.SetMinCpuPlatformInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_min_cpu_platform_request_resource: compute.InstancesSetMinCpuPlatformRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Changes the minimum CPU platform that this instance + should use. This method can only be called on a stopped + instance. For more information, read Specifying a + Minimum CPU Platform. + + Args: + request (Union[google.cloud.compute_v1.types.SetMinCpuPlatformInstanceRequest, dict]): + The request object. A request message for + Instances.SetMinCpuPlatform. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_min_cpu_platform_request_resource (google.cloud.compute_v1.types.InstancesSetMinCpuPlatformRequest): + The body resource for this request + This corresponds to the ``instances_set_min_cpu_platform_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, instance, instances_set_min_cpu_platform_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetMinCpuPlatformInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetMinCpuPlatformInstanceRequest): + request = compute.SetMinCpuPlatformInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if instance is not None: + request.instance = instance + if instances_set_min_cpu_platform_request_resource is not None: + request.instances_set_min_cpu_platform_request_resource = ( + instances_set_min_cpu_platform_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_min_cpu_platform] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_min_cpu_platform( + self, + request: Union[compute.SetMinCpuPlatformInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + instance: str = None, + instances_set_min_cpu_platform_request_resource: compute.InstancesSetMinCpuPlatformRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the minimum CPU platform that this instance + should use. This method can only be called on a stopped + instance. For more information, read Specifying a + Minimum CPU Platform. + + Args: + request (Union[google.cloud.compute_v1.types.SetMinCpuPlatformInstanceRequest, dict]): + The request object. A request message for + Instances.SetMinCpuPlatform. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instances_set_min_cpu_platform_request_resource (google.cloud.compute_v1.types.InstancesSetMinCpuPlatformRequest): + The body resource for this request + This corresponds to the ``instances_set_min_cpu_platform_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1983,28 +5511,17 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance_resource]) + has_flattened_params = any( + [project, zone, instance, instances_set_min_cpu_platform_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2012,23 +5529,27 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertInstanceRequest. + # in a compute.SetMinCpuPlatformInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertInstanceRequest): - request = compute.InsertInstanceRequest(request) + if not isinstance(request, compute.SetMinCpuPlatformInstanceRequest): + request = compute.SetMinCpuPlatformInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if instance_resource is not None: - request.instance_resource = instance_resource + if instance is not None: + request.instance = instance + if instances_set_min_cpu_platform_request_resource is not None: + request.instances_set_min_cpu_platform_request_resource = ( + instances_set_min_cpu_platform_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.set_min_cpu_platform] # Send the request. response = rpc( @@ -2038,26 +5559,58 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def list( + def set_scheduling_unary( self, - request: Union[compute.ListInstancesRequest, dict] = None, + request: Union[compute.SetSchedulingInstanceRequest, dict] = None, *, project: str = None, zone: str = None, + instance: str = None, + scheduling_resource: compute.Scheduling = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves the list of instances contained within the - specified zone. + ) -> compute.Operation: + r"""Sets an instance's scheduling options. You can only call this + method on a stopped instance, that is, a VM instance that is in + a ``TERMINATED`` state. See Instance Life Cycle for more + information on the possible instance states. For more + information about setting scheduling options for a VM, see Set + VM availability policies. Args: - request (Union[google.cloud.compute_v1.types.ListInstancesRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetSchedulingInstanceRequest, dict]): The request object. A request message for - Instances.List. See the method description for details. + Instances.SetScheduling. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2070,6 +5623,16 @@ def list( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instance (str): + Instance name for this request. + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + scheduling_resource (google.cloud.compute_v1.types.Scheduling): + The body resource for this request + This corresponds to the ``scheduling_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2077,17 +5640,15 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.instances.pagers.ListPager: - Contains a list of instances. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone]) + has_flattened_params = any([project, zone, instance, scheduling_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2095,21 +5656,25 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListInstancesRequest. + # in a compute.SetSchedulingInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListInstancesRequest): - request = compute.ListInstancesRequest(request) + if not isinstance(request, compute.SetSchedulingInstanceRequest): + request = compute.SetSchedulingInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone + if instance is not None: + request.instance = instance + if scheduling_resource is not None: + request.scheduling_resource = scheduling_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.set_scheduling] # Send the request. response = rpc( @@ -2119,40 +5684,32 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def list_referrers( + def set_scheduling( self, - request: Union[compute.ListReferrersInstancesRequest, dict] = None, + request: Union[compute.SetSchedulingInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + scheduling_resource: compute.Scheduling = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListReferrersPager: - r"""Retrieves a list of resources that refer to the VM - instance specified in the request. For example, if the - VM instance is part of a managed or unmanaged instance - group, the referrers list includes the instance group. - For more information, read Viewing referrers to VM - instances. + ) -> extended_operation.ExtendedOperation: + r"""Sets an instance's scheduling options. You can only call this + method on a stopped instance, that is, a VM instance that is in + a ``TERMINATED`` state. See Instance Life Cycle for more + information on the possible instance states. For more + information about setting scheduling options for a VM, see Set + VM availability policies. Args: - request (Union[google.cloud.compute_v1.types.ListReferrersInstancesRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetSchedulingInstanceRequest, dict]): The request object. A request message for - Instances.ListReferrers. See the method description for + Instances.SetScheduling. See the method description for details. project (str): Project ID for this request. @@ -2167,14 +5724,15 @@ def list_referrers( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the target instance scoping - this request, or '-' if the request - should span over all instances in the - container. - + Instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + scheduling_resource (google.cloud.compute_v1.types.Scheduling): + The body resource for this request + This corresponds to the ``scheduling_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2182,18 +5740,15 @@ def list_referrers( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.instances.pagers.ListReferrersPager: - Contains a list of instance - referrers. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any([project, zone, instance, scheduling_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2201,11 +5756,11 @@ def list_referrers( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListReferrersInstancesRequest. + # in a compute.SetSchedulingInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListReferrersInstancesRequest): - request = compute.ListReferrersInstancesRequest(request) + if not isinstance(request, compute.SetSchedulingInstanceRequest): + request = compute.SetSchedulingInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2214,10 +5769,12 @@ def list_referrers( request.zone = zone if instance is not None: request.instance = instance + if scheduling_resource is not None: + request.scheduling_resource = scheduling_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_referrers] + rpc = self._transport._wrapped_methods[self._transport.set_scheduling] # Send the request. response = rpc( @@ -2227,37 +5784,55 @@ def list_referrers( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListReferrersPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def remove_resource_policies_unary( + def set_service_account_unary( self, - request: Union[compute.RemoveResourcePoliciesInstanceRequest, dict] = None, + request: Union[compute.SetServiceAccountInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_remove_resource_policies_request_resource: compute.InstancesRemoveResourcePoliciesRequest = None, + instances_set_service_account_request_resource: compute.InstancesSetServiceAccountRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes resource policies from an instance. + r"""Sets the service account on the instance. For more + information, read Changing the service account and + access scopes for an instance. Args: - request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetServiceAccountInstanceRequest, dict]): The request object. A request message for - Instances.RemoveResourcePolicies. See the method - description for details. + Instances.SetServiceAccount. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2271,13 +5846,15 @@ def remove_resource_policies_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - The instance name for this request. + Name of the instance resource to + start. + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_remove_resource_policies_request_resource (google.cloud.compute_v1.types.InstancesRemoveResourcePoliciesRequest): + instances_set_service_account_request_resource (google.cloud.compute_v1.types.InstancesSetServiceAccountRequest): The body resource for this request - This corresponds to the ``instances_remove_resource_policies_request_resource`` field + This corresponds to the ``instances_set_service_account_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2287,34 +5864,16 @@ def remove_resource_policies_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [ - project, - zone, - instance, - instances_remove_resource_policies_request_resource, - ] + [project, zone, instance, instances_set_service_account_request_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -2323,11 +5882,11 @@ def remove_resource_policies_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveResourcePoliciesInstanceRequest. + # in a compute.SetServiceAccountInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.RemoveResourcePoliciesInstanceRequest): - request = compute.RemoveResourcePoliciesInstanceRequest(request) + if not isinstance(request, compute.SetServiceAccountInstanceRequest): + request = compute.SetServiceAccountInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2336,14 +5895,14 @@ def remove_resource_policies_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_remove_resource_policies_request_resource is not None: - request.instances_remove_resource_policies_request_resource = ( - instances_remove_resource_policies_request_resource + if instances_set_service_account_request_resource is not None: + request.instances_set_service_account_request_resource = ( + instances_set_service_account_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] + rpc = self._transport._wrapped_methods[self._transport.set_service_account] # Send the request. response = rpc( @@ -2356,25 +5915,27 @@ def remove_resource_policies_unary( # Done; return the response. return response - def reset_unary( + def set_service_account( self, - request: Union[compute.ResetInstanceRequest, dict] = None, + request: Union[compute.SetServiceAccountInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + instances_set_service_account_request_resource: compute.InstancesSetServiceAccountRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Performs a reset on the instance. This is a hard - reset. The VM does not do a graceful shutdown. For more - information, see Resetting an instance. + ) -> extended_operation.ExtendedOperation: + r"""Sets the service account on the instance. For more + information, read Changing the service account and + access scopes for an instance. Args: - request (Union[google.cloud.compute_v1.types.ResetInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetServiceAccountInstanceRequest, dict]): The request object. A request message for - Instances.Reset. See the method description for details. + Instances.SetServiceAccount. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2388,12 +5949,17 @@ def reset_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name of the instance resource to + start. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instances_set_service_account_request_resource (google.cloud.compute_v1.types.InstancesSetServiceAccountRequest): + The body resource for this request + This corresponds to the ``instances_set_service_account_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2401,28 +5967,17 @@ def reset_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, instance, instances_set_service_account_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2430,11 +5985,11 @@ def reset_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ResetInstanceRequest. + # in a compute.SetServiceAccountInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ResetInstanceRequest): - request = compute.ResetInstanceRequest(request) + if not isinstance(request, compute.SetServiceAccountInstanceRequest): + request = compute.SetServiceAccountInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2443,10 +5998,14 @@ def reset_unary( request.zone = zone if instance is not None: request.instance = instance + if instances_set_service_account_request_resource is not None: + request.instances_set_service_account_request_resource = ( + instances_set_service_account_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.reset] + rpc = self._transport._wrapped_methods[self._transport.set_service_account] # Send the request. response = rpc( @@ -2456,28 +6015,58 @@ def reset_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def resume_unary( + def set_shielded_instance_integrity_policy_unary( self, - request: Union[compute.ResumeInstanceRequest, dict] = None, + request: Union[ + compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict + ] = None, *, project: str = None, zone: str = None, instance: str = None, + shielded_instance_integrity_policy_resource: compute.ShieldedInstanceIntegrityPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Resumes an instance that was suspended using the - instances().suspend method. + r"""Sets the Shielded Instance integrity policy for an + instance. You can only use this method on a running + instance. This method supports PATCH semantics and uses + the JSON merge patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.ResumeInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict]): The request object. A request message for - Instances.Resume. See the method description for - details. + Instances.SetShieldedInstanceIntegrityPolicy. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2491,12 +6080,17 @@ def resume_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance resource to - resume. + Name or id of the instance scoping + this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + shielded_instance_integrity_policy_resource (google.cloud.compute_v1.types.ShieldedInstanceIntegrityPolicy): + The body resource for this request + This corresponds to the ``shielded_instance_integrity_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2504,28 +6098,17 @@ def resume_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, instance, shielded_instance_integrity_policy_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2533,11 +6116,13 @@ def resume_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ResumeInstanceRequest. + # in a compute.SetShieldedInstanceIntegrityPolicyInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ResumeInstanceRequest): - request = compute.ResumeInstanceRequest(request) + if not isinstance( + request, compute.SetShieldedInstanceIntegrityPolicyInstanceRequest + ): + request = compute.SetShieldedInstanceIntegrityPolicyInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2546,10 +6131,16 @@ def resume_unary( request.zone = zone if instance is not None: request.instance = instance + if shielded_instance_integrity_policy_resource is not None: + request.shielded_instance_integrity_policy_resource = ( + shielded_instance_integrity_policy_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.resume] + rpc = self._transport._wrapped_methods[ + self._transport.set_shielded_instance_integrity_policy + ] # Send the request. response = rpc( @@ -2562,24 +6153,30 @@ def resume_unary( # Done; return the response. return response - def send_diagnostic_interrupt( + def set_shielded_instance_integrity_policy( self, - request: Union[compute.SendDiagnosticInterruptInstanceRequest, dict] = None, + request: Union[ + compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict + ] = None, *, project: str = None, zone: str = None, instance: str = None, + shielded_instance_integrity_policy_resource: compute.ShieldedInstanceIntegrityPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.SendDiagnosticInterruptInstanceResponse: - r"""Sends diagnostic interrupt to the instance. + ) -> extended_operation.ExtendedOperation: + r"""Sets the Shielded Instance integrity policy for an + instance. You can only use this method on a running + instance. This method supports PATCH semantics and uses + the JSON merge patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.SendDiagnosticInterruptInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict]): The request object. A request message for - Instances.SendDiagnosticInterrupt. See the method - description for details. + Instances.SetShieldedInstanceIntegrityPolicy. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2593,12 +6190,17 @@ def send_diagnostic_interrupt( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name or id of the instance scoping + this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + shielded_instance_integrity_policy_resource (google.cloud.compute_v1.types.ShieldedInstanceIntegrityPolicy): + The body resource for this request + This corresponds to the ``shielded_instance_integrity_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2606,16 +6208,17 @@ def send_diagnostic_interrupt( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.SendDiagnosticInterruptInstanceResponse: - A response message for - Instances.SendDiagnosticInterrupt. See - the method description for details. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, instance, shielded_instance_integrity_policy_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2623,11 +6226,13 @@ def send_diagnostic_interrupt( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SendDiagnosticInterruptInstanceRequest. + # in a compute.SetShieldedInstanceIntegrityPolicyInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SendDiagnosticInterruptInstanceRequest): - request = compute.SendDiagnosticInterruptInstanceRequest(request) + if not isinstance( + request, compute.SetShieldedInstanceIntegrityPolicyInstanceRequest + ): + request = compute.SetShieldedInstanceIntegrityPolicyInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2636,11 +6241,15 @@ def send_diagnostic_interrupt( request.zone = zone if instance is not None: request.instance = instance + if shielded_instance_integrity_policy_resource is not None: + request.shielded_instance_integrity_policy_resource = ( + shielded_instance_integrity_policy_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = self._transport._wrapped_methods[ - self._transport.send_diagnostic_interrupt + self._transport.set_shielded_instance_integrity_policy ] # Send the request. @@ -2651,27 +6260,54 @@ def send_diagnostic_interrupt( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_deletion_protection_unary( + def set_tags_unary( self, - request: Union[compute.SetDeletionProtectionInstanceRequest, dict] = None, + request: Union[compute.SetTagsInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - resource: str = None, + instance: str = None, + tags_resource: compute.Tags = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets deletion protection on the instance. + r"""Sets network tags for the specified instance to the + data included in the request. Args: - request (Union[google.cloud.compute_v1.types.SetDeletionProtectionInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetTagsInstanceRequest, dict]): The request object. A request message for - Instances.SetDeletionProtection. See the method - description for details. + Instances.SetTags. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2684,11 +6320,16 @@ def set_deletion_protection_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this + instance (str): + Name of the instance scoping this request. - This corresponds to the ``resource`` field + This corresponds to the ``instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + tags_resource (google.cloud.compute_v1.types.Tags): + The body resource for this request + This corresponds to the ``tags_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2698,28 +6339,15 @@ def set_deletion_protection_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, resource]) + has_flattened_params = any([project, zone, instance, tags_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2727,23 +6355,25 @@ def set_deletion_protection_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetDeletionProtectionInstanceRequest. + # in a compute.SetTagsInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetDeletionProtectionInstanceRequest): - request = compute.SetDeletionProtectionInstanceRequest(request) + if not isinstance(request, compute.SetTagsInstanceRequest): + request = compute.SetTagsInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if resource is not None: - request.resource = resource + if instance is not None: + request.instance = instance + if tags_resource is not None: + request.tags_resource = tags_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_deletion_protection] + rpc = self._transport._wrapped_methods[self._transport.set_tags] # Send the request. response = rpc( @@ -2756,27 +6386,26 @@ def set_deletion_protection_unary( # Done; return the response. return response - def set_disk_auto_delete_unary( + def set_tags( self, - request: Union[compute.SetDiskAutoDeleteInstanceRequest, dict] = None, + request: Union[compute.SetTagsInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - auto_delete: bool = None, - device_name: str = None, + tags_resource: compute.Tags = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets the auto-delete flag for a disk attached to an - instance. + ) -> extended_operation.ExtendedOperation: + r"""Sets network tags for the specified instance to the + data included in the request. Args: - request (Union[google.cloud.compute_v1.types.SetDiskAutoDeleteInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetTagsInstanceRequest, dict]): The request object. A request message for - Instances.SetDiskAutoDelete. See the method description - for details. + Instances.SetTags. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2790,24 +6419,15 @@ def set_disk_auto_delete_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - The instance name for this request. - This corresponds to the ``instance`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - auto_delete (bool): - Whether to auto-delete the disk when - the instance is deleted. + Name of the instance scoping this + request. - This corresponds to the ``auto_delete`` field + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - device_name (str): - The device name of the disk to - modify. Make a get() request on the - instance to view currently attached - disks and device names. - - This corresponds to the ``device_name`` field + tags_resource (google.cloud.compute_v1.types.Tags): + The body resource for this request + This corresponds to the ``tags_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2817,28 +6437,15 @@ def set_disk_auto_delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, auto_delete, device_name]) + has_flattened_params = any([project, zone, instance, tags_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2846,11 +6453,11 @@ def set_disk_auto_delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetDiskAutoDeleteInstanceRequest. + # in a compute.SetTagsInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetDiskAutoDeleteInstanceRequest): - request = compute.SetDiskAutoDeleteInstanceRequest(request) + if not isinstance(request, compute.SetTagsInstanceRequest): + request = compute.SetTagsInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2859,14 +6466,12 @@ def set_disk_auto_delete_unary( request.zone = zone if instance is not None: request.instance = instance - if auto_delete is not None: - request.auto_delete = auto_delete - if device_name is not None: - request.device_name = device_name + if tags_resource is not None: + request.tags_resource = tags_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_disk_auto_delete] + rpc = self._transport._wrapped_methods[self._transport.set_tags] # Send the request. response = rpc( @@ -2876,29 +6481,53 @@ def set_disk_auto_delete_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_iam_policy( + def simulate_maintenance_event_unary( self, - request: Union[compute.SetIamPolicyInstanceRequest, dict] = None, + request: Union[compute.SimulateMaintenanceEventInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - resource: str = None, - zone_set_policy_request_resource: compute.ZoneSetPolicyRequest = None, + instance: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Sets the access control policy on the specified - resource. Replaces any existing policy. + ) -> compute.Operation: + r"""Simulates a host maintenance event on a VM. For more + information, see Simulate a host maintenance event. Args: - request (Union[google.cloud.compute_v1.types.SetIamPolicyInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SimulateMaintenanceEventInstanceRequest, dict]): The request object. A request message for - Instances.SetIamPolicy. See the method description for - details. + Instances.SimulateMaintenanceEvent. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2911,16 +6540,11 @@ def set_iam_policy( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this - request. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - zone_set_policy_request_resource (google.cloud.compute_v1.types.ZoneSetPolicyRequest): - The body resource for this request - This corresponds to the ``zone_set_policy_request_resource`` field + instance (str): + Name of the instance scoping this + request. + + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2930,55 +6554,15 @@ def set_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, - see the [IAM - documentation](\ https://cloud.google.com/iam/docs/). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, resource, zone_set_policy_request_resource] - ) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2986,27 +6570,25 @@ def set_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetIamPolicyInstanceRequest. + # in a compute.SimulateMaintenanceEventInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetIamPolicyInstanceRequest): - request = compute.SetIamPolicyInstanceRequest(request) + if not isinstance(request, compute.SimulateMaintenanceEventInstanceRequest): + request = compute.SimulateMaintenanceEventInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if resource is not None: - request.resource = resource - if zone_set_policy_request_resource is not None: - request.zone_set_policy_request_resource = ( - zone_set_policy_request_resource - ) + if instance is not None: + request.instance = instance # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] + rpc = self._transport._wrapped_methods[ + self._transport.simulate_maintenance_event + ] # Send the request. response = rpc( @@ -3019,26 +6601,25 @@ def set_iam_policy( # Done; return the response. return response - def set_labels_unary( + def simulate_maintenance_event( self, - request: Union[compute.SetLabelsInstanceRequest, dict] = None, + request: Union[compute.SimulateMaintenanceEventInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_set_labels_request_resource: compute.InstancesSetLabelsRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets labels on an instance. To learn more about - labels, read the Labeling Resources documentation. + ) -> extended_operation.ExtendedOperation: + r"""Simulates a host maintenance event on a VM. For more + information, see Simulate a host maintenance event. Args: - request (Union[google.cloud.compute_v1.types.SetLabelsInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SimulateMaintenanceEventInstanceRequest, dict]): The request object. A request message for - Instances.SetLabels. See the method description for - details. + Instances.SimulateMaintenanceEvent. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3058,11 +6639,6 @@ def set_labels_unary( This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_set_labels_request_resource (google.cloud.compute_v1.types.InstancesSetLabelsRequest): - The body resource for this request - This corresponds to the ``instances_set_labels_request_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3070,30 +6646,15 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, instance, instances_set_labels_request_resource] - ) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3101,11 +6662,11 @@ def set_labels_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetLabelsInstanceRequest. + # in a compute.SimulateMaintenanceEventInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetLabelsInstanceRequest): - request = compute.SetLabelsInstanceRequest(request) + if not isinstance(request, compute.SimulateMaintenanceEventInstanceRequest): + request = compute.SimulateMaintenanceEventInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3114,14 +6675,12 @@ def set_labels_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_set_labels_request_resource is not None: - request.instances_set_labels_request_resource = ( - instances_set_labels_request_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_labels] + rpc = self._transport._wrapped_methods[ + self._transport.simulate_maintenance_event + ] # Send the request. response = rpc( @@ -3131,29 +6690,53 @@ def set_labels_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_machine_resources_unary( + def start_unary( self, - request: Union[compute.SetMachineResourcesInstanceRequest, dict] = None, + request: Union[compute.StartInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_set_machine_resources_request_resource: compute.InstancesSetMachineResourcesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Changes the number and/or type of accelerator for a - stopped instance to the values specified in the request. + r"""Starts an instance that was stopped using the + instances().stop method. For more information, see + Restart an instance. Args: - request (Union[google.cloud.compute_v1.types.SetMachineResourcesInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.StartInstanceRequest, dict]): The request object. A request message for - Instances.SetMachineResources. See the method - description for details. + Instances.Start. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3167,17 +6750,12 @@ def set_machine_resources_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name of the instance resource to + start. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_set_machine_resources_request_resource (google.cloud.compute_v1.types.InstancesSetMachineResourcesRequest): - The body resource for this request - This corresponds to the ``instances_set_machine_resources_request_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3185,30 +6763,15 @@ def set_machine_resources_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, instance, instances_set_machine_resources_request_resource] - ) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3216,11 +6779,11 @@ def set_machine_resources_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetMachineResourcesInstanceRequest. + # in a compute.StartInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetMachineResourcesInstanceRequest): - request = compute.SetMachineResourcesInstanceRequest(request) + if not isinstance(request, compute.StartInstanceRequest): + request = compute.StartInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3229,14 +6792,10 @@ def set_machine_resources_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_set_machine_resources_request_resource is not None: - request.instances_set_machine_resources_request_resource = ( - instances_set_machine_resources_request_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_machine_resources] + rpc = self._transport._wrapped_methods[self._transport.start] # Send the request. response = rpc( @@ -3249,26 +6808,25 @@ def set_machine_resources_unary( # Done; return the response. return response - def set_machine_type_unary( + def start( self, - request: Union[compute.SetMachineTypeInstanceRequest, dict] = None, + request: Union[compute.StartInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_set_machine_type_request_resource: compute.InstancesSetMachineTypeRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Changes the machine type for a stopped instance to - the machine type specified in the request. + ) -> extended_operation.ExtendedOperation: + r"""Starts an instance that was stopped using the + instances().stop method. For more information, see + Restart an instance. Args: - request (Union[google.cloud.compute_v1.types.SetMachineTypeInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.StartInstanceRequest, dict]): The request object. A request message for - Instances.SetMachineType. See the method description for - details. + Instances.Start. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3282,17 +6840,12 @@ def set_machine_type_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name of the instance resource to + start. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_set_machine_type_request_resource (google.cloud.compute_v1.types.InstancesSetMachineTypeRequest): - The body resource for this request - This corresponds to the ``instances_set_machine_type_request_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3300,30 +6853,15 @@ def set_machine_type_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, instance, instances_set_machine_type_request_resource] - ) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3331,11 +6869,11 @@ def set_machine_type_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetMachineTypeInstanceRequest. + # in a compute.StartInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetMachineTypeInstanceRequest): - request = compute.SetMachineTypeInstanceRequest(request) + if not isinstance(request, compute.StartInstanceRequest): + request = compute.StartInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3344,14 +6882,10 @@ def set_machine_type_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_set_machine_type_request_resource is not None: - request.instances_set_machine_type_request_resource = ( - instances_set_machine_type_request_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_machine_type] + rpc = self._transport._wrapped_methods[self._transport.start] # Send the request. response = rpc( @@ -3361,29 +6895,55 @@ def set_machine_type_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_metadata_unary( + def start_with_encryption_key_unary( self, - request: Union[compute.SetMetadataInstanceRequest, dict] = None, + request: Union[compute.StartWithEncryptionKeyInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - metadata_resource: compute.Metadata = None, + instances_start_with_encryption_key_request_resource: compute.InstancesStartWithEncryptionKeyRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets metadata for the specified instance to the data - included in the request. + r"""Starts an instance that was stopped using the + instances().stop method. For more information, see + Restart an instance. Args: - request (Union[google.cloud.compute_v1.types.SetMetadataInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.StartWithEncryptionKeyInstanceRequest, dict]): The request object. A request message for - Instances.SetMetadata. See the method description for - details. + Instances.StartWithEncryptionKey. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3397,15 +6957,15 @@ def set_metadata_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name of the instance resource to + start. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - metadata_resource (google.cloud.compute_v1.types.Metadata): + instances_start_with_encryption_key_request_resource (google.cloud.compute_v1.types.InstancesStartWithEncryptionKeyRequest): The body resource for this request - This corresponds to the ``metadata_resource`` field + This corresponds to the ``instances_start_with_encryption_key_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -3415,28 +6975,22 @@ def set_metadata_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, metadata_resource]) + has_flattened_params = any( + [ + project, + zone, + instance, + instances_start_with_encryption_key_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3444,11 +6998,11 @@ def set_metadata_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetMetadataInstanceRequest. + # in a compute.StartWithEncryptionKeyInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetMetadataInstanceRequest): - request = compute.SetMetadataInstanceRequest(request) + if not isinstance(request, compute.StartWithEncryptionKeyInstanceRequest): + request = compute.StartWithEncryptionKeyInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3457,12 +7011,16 @@ def set_metadata_unary( request.zone = zone if instance is not None: request.instance = instance - if metadata_resource is not None: - request.metadata_resource = metadata_resource + if instances_start_with_encryption_key_request_resource is not None: + request.instances_start_with_encryption_key_request_resource = ( + instances_start_with_encryption_key_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_metadata] + rpc = self._transport._wrapped_methods[ + self._transport.start_with_encryption_key + ] # Send the request. response = rpc( @@ -3475,28 +7033,27 @@ def set_metadata_unary( # Done; return the response. return response - def set_min_cpu_platform_unary( + def start_with_encryption_key( self, - request: Union[compute.SetMinCpuPlatformInstanceRequest, dict] = None, + request: Union[compute.StartWithEncryptionKeyInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_set_min_cpu_platform_request_resource: compute.InstancesSetMinCpuPlatformRequest = None, + instances_start_with_encryption_key_request_resource: compute.InstancesStartWithEncryptionKeyRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, - metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Changes the minimum CPU platform that this instance - should use. This method can only be called on a stopped - instance. For more information, read Specifying a - Minimum CPU Platform. + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Starts an instance that was stopped using the + instances().stop method. For more information, see + Restart an instance. Args: - request (Union[google.cloud.compute_v1.types.SetMinCpuPlatformInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.StartWithEncryptionKeyInstanceRequest, dict]): The request object. A request message for - Instances.SetMinCpuPlatform. See the method description - for details. + Instances.StartWithEncryptionKey. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3510,15 +7067,15 @@ def set_min_cpu_platform_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name of the instance resource to + start. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_set_min_cpu_platform_request_resource (google.cloud.compute_v1.types.InstancesSetMinCpuPlatformRequest): + instances_start_with_encryption_key_request_resource (google.cloud.compute_v1.types.InstancesStartWithEncryptionKeyRequest): The body resource for this request - This corresponds to the ``instances_set_min_cpu_platform_request_resource`` field + This corresponds to the ``instances_start_with_encryption_key_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -3528,29 +7085,21 @@ def set_min_cpu_platform_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, zone, instance, instances_set_min_cpu_platform_request_resource] + [ + project, + zone, + instance, + instances_start_with_encryption_key_request_resource, + ] ) if request is not None and has_flattened_params: raise ValueError( @@ -3559,11 +7108,11 @@ def set_min_cpu_platform_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetMinCpuPlatformInstanceRequest. + # in a compute.StartWithEncryptionKeyInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetMinCpuPlatformInstanceRequest): - request = compute.SetMinCpuPlatformInstanceRequest(request) + if not isinstance(request, compute.StartWithEncryptionKeyInstanceRequest): + request = compute.StartWithEncryptionKeyInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3572,14 +7121,16 @@ def set_min_cpu_platform_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_set_min_cpu_platform_request_resource is not None: - request.instances_set_min_cpu_platform_request_resource = ( - instances_set_min_cpu_platform_request_resource + if instances_start_with_encryption_key_request_resource is not None: + request.instances_start_with_encryption_key_request_resource = ( + instances_start_with_encryption_key_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_min_cpu_platform] + rpc = self._transport._wrapped_methods[ + self._transport.start_with_encryption_key + ] # Send the request. response = rpc( @@ -3589,33 +7140,57 @@ def set_min_cpu_platform_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_scheduling_unary( + def stop_unary( self, - request: Union[compute.SetSchedulingInstanceRequest, dict] = None, + request: Union[compute.StopInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - scheduling_resource: compute.Scheduling = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets an instance's scheduling options. You can only call this - method on a stopped instance, that is, a VM instance that is in - a ``TERMINATED`` state. See Instance Life Cycle for more - information on the possible instance states. For more - information about setting scheduling options for a VM, see Set - VM availability policies. + r"""Stops a running instance, shutting it down cleanly, + and allows you to restart the instance at a later time. + Stopped instances do not incur VM usage charges while + they are stopped. However, resources that the VM is + using, such as persistent disks and static IP addresses, + will continue to be charged until they are deleted. For + more information, see Stopping an instance. Args: - request (Union[google.cloud.compute_v1.types.SetSchedulingInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.StopInstanceRequest, dict]): The request object. A request message for - Instances.SetScheduling. See the method description for - details. + Instances.Stop. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3629,15 +7204,12 @@ def set_scheduling_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Instance name for this request. + Name of the instance resource to + stop. + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - scheduling_resource (google.cloud.compute_v1.types.Scheduling): - The body resource for this request - This corresponds to the ``scheduling_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3645,28 +7217,15 @@ def set_scheduling_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, scheduling_resource]) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3674,11 +7233,11 @@ def set_scheduling_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetSchedulingInstanceRequest. + # in a compute.StopInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetSchedulingInstanceRequest): - request = compute.SetSchedulingInstanceRequest(request) + if not isinstance(request, compute.StopInstanceRequest): + request = compute.StopInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3687,12 +7246,10 @@ def set_scheduling_unary( request.zone = zone if instance is not None: request.instance = instance - if scheduling_resource is not None: - request.scheduling_resource = scheduling_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_scheduling] + rpc = self._transport._wrapped_methods[self._transport.stop] # Send the request. response = rpc( @@ -3705,27 +7262,29 @@ def set_scheduling_unary( # Done; return the response. return response - def set_service_account_unary( + def stop( self, - request: Union[compute.SetServiceAccountInstanceRequest, dict] = None, + request: Union[compute.StopInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_set_service_account_request_resource: compute.InstancesSetServiceAccountRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets the service account on the instance. For more - information, read Changing the service account and - access scopes for an instance. + ) -> extended_operation.ExtendedOperation: + r"""Stops a running instance, shutting it down cleanly, + and allows you to restart the instance at a later time. + Stopped instances do not incur VM usage charges while + they are stopped. However, resources that the VM is + using, such as persistent disks and static IP addresses, + will continue to be charged until they are deleted. For + more information, see Stopping an instance. Args: - request (Union[google.cloud.compute_v1.types.SetServiceAccountInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.StopInstanceRequest, dict]): The request object. A request message for - Instances.SetServiceAccount. See the method description - for details. + Instances.Stop. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3740,16 +7299,11 @@ def set_service_account_unary( should not be set. instance (str): Name of the instance resource to - start. + stop. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_set_service_account_request_resource (google.cloud.compute_v1.types.InstancesSetServiceAccountRequest): - The body resource for this request - This corresponds to the ``instances_set_service_account_request_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3757,30 +7311,15 @@ def set_service_account_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, instance, instances_set_service_account_request_resource] - ) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3788,11 +7327,11 @@ def set_service_account_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetServiceAccountInstanceRequest. + # in a compute.StopInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetServiceAccountInstanceRequest): - request = compute.SetServiceAccountInstanceRequest(request) + if not isinstance(request, compute.StopInstanceRequest): + request = compute.StopInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3801,14 +7340,10 @@ def set_service_account_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_set_service_account_request_resource is not None: - request.instances_set_service_account_request_resource = ( - instances_set_service_account_request_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_service_account] + rpc = self._transport._wrapped_methods[self._transport.stop] # Send the request. response = rpc( @@ -3818,33 +7353,60 @@ def set_service_account_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_shielded_instance_integrity_policy_unary( + def suspend_unary( self, - request: Union[ - compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict - ] = None, + request: Union[compute.SuspendInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - shielded_instance_integrity_policy_resource: compute.ShieldedInstanceIntegrityPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets the Shielded Instance integrity policy for an - instance. You can only use this method on a running - instance. This method supports PATCH semantics and uses - the JSON merge patch format and processing rules. + r"""This method suspends a running instance, saving its + state to persistent storage, and allows you to resume + the instance at a later time. Suspended instances have + no compute costs (cores or RAM), and incur only storage + charges for the saved VM memory and localSSD data. Any + charged resources the virtual machine was using, such as + persistent disks and static IP addresses, will continue + to be charged while the instance is suspended. For more + information, see Suspending and resuming an instance. Args: - request (Union[google.cloud.compute_v1.types.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SuspendInstanceRequest, dict]): The request object. A request message for - Instances.SetShieldedInstanceIntegrityPolicy. See the - method description for details. + Instances.Suspend. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -3858,17 +7420,12 @@ def set_shielded_instance_integrity_policy_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name or id of the instance scoping - this request. + Name of the instance resource to + suspend. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - shielded_instance_integrity_policy_resource (google.cloud.compute_v1.types.ShieldedInstanceIntegrityPolicy): - The body resource for this request - This corresponds to the ``shielded_instance_integrity_policy_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3876,30 +7433,15 @@ def set_shielded_instance_integrity_policy_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, instance, shielded_instance_integrity_policy_resource] - ) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -3907,13 +7449,11 @@ def set_shielded_instance_integrity_policy_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetShieldedInstanceIntegrityPolicyInstanceRequest. + # in a compute.SuspendInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.SetShieldedInstanceIntegrityPolicyInstanceRequest - ): - request = compute.SetShieldedInstanceIntegrityPolicyInstanceRequest(request) + if not isinstance(request, compute.SuspendInstanceRequest): + request = compute.SuspendInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -3922,16 +7462,10 @@ def set_shielded_instance_integrity_policy_unary( request.zone = zone if instance is not None: request.instance = instance - if shielded_instance_integrity_policy_resource is not None: - request.shielded_instance_integrity_policy_resource = ( - shielded_instance_integrity_policy_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.set_shielded_instance_integrity_policy - ] + rpc = self._transport._wrapped_methods[self._transport.suspend] # Send the request. response = rpc( @@ -3944,25 +7478,31 @@ def set_shielded_instance_integrity_policy_unary( # Done; return the response. return response - def set_tags_unary( + def suspend( self, - request: Union[compute.SetTagsInstanceRequest, dict] = None, + request: Union[compute.SuspendInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - tags_resource: compute.Tags = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets network tags for the specified instance to the - data included in the request. + ) -> extended_operation.ExtendedOperation: + r"""This method suspends a running instance, saving its + state to persistent storage, and allows you to resume + the instance at a later time. Suspended instances have + no compute costs (cores or RAM), and incur only storage + charges for the saved VM memory and localSSD data. Any + charged resources the virtual machine was using, such as + persistent disks and static IP addresses, will continue + to be charged while the instance is suspended. For more + information, see Suspending and resuming an instance. Args: - request (Union[google.cloud.compute_v1.types.SetTagsInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.SuspendInstanceRequest, dict]): The request object. A request message for - Instances.SetTags. See the method description for + Instances.Suspend. See the method description for details. project (str): Project ID for this request. @@ -3977,17 +7517,12 @@ def set_tags_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. + Name of the instance resource to + suspend. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - tags_resource (google.cloud.compute_v1.types.Tags): - The body resource for this request - This corresponds to the ``tags_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -3995,28 +7530,15 @@ def set_tags_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, tags_resource]) + has_flattened_params = any([project, zone, instance]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4024,11 +7546,11 @@ def set_tags_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetTagsInstanceRequest. + # in a compute.SuspendInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetTagsInstanceRequest): - request = compute.SetTagsInstanceRequest(request) + if not isinstance(request, compute.SuspendInstanceRequest): + request = compute.SuspendInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4037,12 +7559,10 @@ def set_tags_unary( request.zone = zone if instance is not None: request.instance = instance - if tags_resource is not None: - request.tags_resource = tags_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_tags] + rpc = self._transport._wrapped_methods[self._transport.suspend] # Send the request. response = rpc( @@ -4052,28 +7572,54 @@ def set_tags_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def simulate_maintenance_event_unary( + def test_iam_permissions( self, - request: Union[compute.SimulateMaintenanceEventInstanceRequest, dict] = None, + request: Union[compute.TestIamPermissionsInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - instance: str = None, + resource: str = None, + test_permissions_request_resource: compute.TestPermissionsRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Simulates a host maintenance event on a VM. For more - information, see Simulate a host maintenance event. + ) -> compute.TestPermissionsResponse: + r"""Returns permissions that a caller has on the + specified resource. Args: - request (Union[google.cloud.compute_v1.types.SimulateMaintenanceEventInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.TestIamPermissionsInstanceRequest, dict]): The request object. A request message for - Instances.SimulateMaintenanceEvent. See the method - description for details. + Instances.TestIamPermissions. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4086,11 +7632,16 @@ def simulate_maintenance_event_unary( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance (str): - Name of the instance scoping this + resource (str): + Name or id of the resource for this request. - This corresponds to the ``instance`` field + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + test_permissions_request_resource (google.cloud.compute_v1.types.TestPermissionsRequest): + The body resource for this request + This corresponds to the ``test_permissions_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -4100,28 +7651,15 @@ def simulate_maintenance_event_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.cloud.compute_v1.types.TestPermissionsResponse: """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, resource, test_permissions_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4129,25 +7667,27 @@ def simulate_maintenance_event_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SimulateMaintenanceEventInstanceRequest. + # in a compute.TestIamPermissionsInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SimulateMaintenanceEventInstanceRequest): - request = compute.SimulateMaintenanceEventInstanceRequest(request) + if not isinstance(request, compute.TestIamPermissionsInstanceRequest): + request = compute.TestIamPermissionsInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if instance is not None: - request.instance = instance + if resource is not None: + request.resource = resource + if test_permissions_request_resource is not None: + request.test_permissions_request_resource = ( + test_permissions_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.simulate_maintenance_event - ] + rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] # Send the request. response = rpc( @@ -4160,25 +7700,28 @@ def simulate_maintenance_event_unary( # Done; return the response. return response - def start_unary( + def update_unary( self, - request: Union[compute.StartInstanceRequest, dict] = None, + request: Union[compute.UpdateInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + instance_resource: compute.Instance = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Starts an instance that was stopped using the - instances().stop method. For more information, see - Restart an instance. + r"""Updates an instance only if the necessary resources + are available. This method can update only a specific + set of instance properties. See Updating a running + instance for a list of updatable instance properties. Args: - request (Union[google.cloud.compute_v1.types.StartInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateInstanceRequest, dict]): The request object. A request message for - Instances.Start. See the method description for details. + Instances.Update. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4193,11 +7736,16 @@ def start_unary( should not be set. instance (str): Name of the instance resource to - start. + update. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instance_resource (google.cloud.compute_v1.types.Instance): + The body resource for this request + This corresponds to the ``instance_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -4205,28 +7753,15 @@ def start_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any([project, zone, instance, instance_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4234,11 +7769,11 @@ def start_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.StartInstanceRequest. + # in a compute.UpdateInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.StartInstanceRequest): - request = compute.StartInstanceRequest(request) + if not isinstance(request, compute.UpdateInstanceRequest): + request = compute.UpdateInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4247,10 +7782,12 @@ def start_unary( request.zone = zone if instance is not None: request.instance = instance + if instance_resource is not None: + request.instance_resource = instance_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.start] + rpc = self._transport._wrapped_methods[self._transport.update] # Send the request. response = rpc( @@ -4263,27 +7800,28 @@ def start_unary( # Done; return the response. return response - def start_with_encryption_key_unary( + def update( self, - request: Union[compute.StartWithEncryptionKeyInstanceRequest, dict] = None, + request: Union[compute.UpdateInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instances_start_with_encryption_key_request_resource: compute.InstancesStartWithEncryptionKeyRequest = None, + instance_resource: compute.Instance = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Starts an instance that was stopped using the - instances().stop method. For more information, see - Restart an instance. + ) -> extended_operation.ExtendedOperation: + r"""Updates an instance only if the necessary resources + are available. This method can update only a specific + set of instance properties. See Updating a running + instance for a list of updatable instance properties. Args: - request (Union[google.cloud.compute_v1.types.StartWithEncryptionKeyInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateInstanceRequest, dict]): The request object. A request message for - Instances.StartWithEncryptionKey. See the method - description for details. + Instances.Update. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4298,14 +7836,14 @@ def start_with_encryption_key_unary( should not be set. instance (str): Name of the instance resource to - start. + update. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instances_start_with_encryption_key_request_resource (google.cloud.compute_v1.types.InstancesStartWithEncryptionKeyRequest): + instance_resource (google.cloud.compute_v1.types.Instance): The body resource for this request - This corresponds to the ``instances_start_with_encryption_key_request_resource`` field + This corresponds to the ``instance_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -4315,35 +7853,15 @@ def start_with_encryption_key_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [ - project, - zone, - instance, - instances_start_with_encryption_key_request_resource, - ] - ) + has_flattened_params = any([project, zone, instance, instance_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4351,11 +7869,11 @@ def start_with_encryption_key_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.StartWithEncryptionKeyInstanceRequest. + # in a compute.UpdateInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.StartWithEncryptionKeyInstanceRequest): - request = compute.StartWithEncryptionKeyInstanceRequest(request) + if not isinstance(request, compute.UpdateInstanceRequest): + request = compute.UpdateInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4364,16 +7882,12 @@ def start_with_encryption_key_unary( request.zone = zone if instance is not None: request.instance = instance - if instances_start_with_encryption_key_request_resource is not None: - request.instances_start_with_encryption_key_request_resource = ( - instances_start_with_encryption_key_request_resource - ) + if instance_resource is not None: + request.instance_resource = instance_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.start_with_encryption_key - ] + rpc = self._transport._wrapped_methods[self._transport.update] # Send the request. response = rpc( @@ -4383,32 +7897,57 @@ def start_with_encryption_key_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def stop_unary( + def update_access_config_unary( self, - request: Union[compute.StopInstanceRequest, dict] = None, + request: Union[compute.UpdateAccessConfigInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + network_interface: str = None, + access_config_resource: compute.AccessConfig = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Stops a running instance, shutting it down cleanly, - and allows you to restart the instance at a later time. - Stopped instances do not incur VM usage charges while - they are stopped. However, resources that the VM is - using, such as persistent disks and static IP addresses, - will continue to be charged until they are deleted. For - more information, see Stopping an instance. + r"""Updates the specified access config from an + instance's network interface with the data included in + the request. This method supports PATCH semantics and + uses the JSON merge patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.StopInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateAccessConfigInstanceRequest, dict]): The request object. A request message for - Instances.Stop. See the method description for details. + Instances.UpdateAccessConfig. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4422,12 +7961,22 @@ def stop_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance resource to - stop. - + The instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + network_interface (str): + The name of the network interface + where the access config is attached. + + This corresponds to the ``network_interface`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + access_config_resource (google.cloud.compute_v1.types.AccessConfig): + The body resource for this request + This corresponds to the ``access_config_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -4435,28 +7984,17 @@ def stop_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, instance, network_interface, access_config_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4464,11 +8002,11 @@ def stop_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.StopInstanceRequest. + # in a compute.UpdateAccessConfigInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.StopInstanceRequest): - request = compute.StopInstanceRequest(request) + if not isinstance(request, compute.UpdateAccessConfigInstanceRequest): + request = compute.UpdateAccessConfigInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4477,10 +8015,14 @@ def stop_unary( request.zone = zone if instance is not None: request.instance = instance + if network_interface is not None: + request.network_interface = network_interface + if access_config_resource is not None: + request.access_config_resource = access_config_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.stop] + rpc = self._transport._wrapped_methods[self._transport.update_access_config] # Send the request. response = rpc( @@ -4493,32 +8035,29 @@ def stop_unary( # Done; return the response. return response - def suspend_unary( + def update_access_config( self, - request: Union[compute.SuspendInstanceRequest, dict] = None, + request: Union[compute.UpdateAccessConfigInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, + network_interface: str = None, + access_config_resource: compute.AccessConfig = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""This method suspends a running instance, saving its - state to persistent storage, and allows you to resume - the instance at a later time. Suspended instances have - no compute costs (cores or RAM), and incur only storage - charges for the saved VM memory and localSSD data. Any - charged resources the virtual machine was using, such as - persistent disks and static IP addresses, will continue - to be charged while the instance is suspended. For more - information, see Suspending and resuming an instance. + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified access config from an + instance's network interface with the data included in + the request. This method supports PATCH semantics and + uses the JSON merge patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.SuspendInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateAccessConfigInstanceRequest, dict]): The request object. A request message for - Instances.Suspend. See the method description for - details. + Instances.UpdateAccessConfig. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4532,12 +8071,22 @@ def suspend_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance resource to - suspend. - + The instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + network_interface (str): + The name of the network interface + where the access config is attached. + + This corresponds to the ``network_interface`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + access_config_resource (google.cloud.compute_v1.types.AccessConfig): + The body resource for this request + This corresponds to the ``access_config_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -4545,28 +8094,17 @@ def suspend_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance]) + has_flattened_params = any( + [project, zone, instance, network_interface, access_config_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4574,11 +8112,11 @@ def suspend_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SuspendInstanceRequest. + # in a compute.UpdateAccessConfigInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SuspendInstanceRequest): - request = compute.SuspendInstanceRequest(request) + if not isinstance(request, compute.UpdateAccessConfigInstanceRequest): + request = compute.UpdateAccessConfigInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4587,10 +8125,14 @@ def suspend_unary( request.zone = zone if instance is not None: request.instance = instance + if network_interface is not None: + request.network_interface = network_interface + if access_config_resource is not None: + request.access_config_resource = access_config_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.suspend] + rpc = self._transport._wrapped_methods[self._transport.update_access_config] # Send the request. response = rpc( @@ -4600,29 +8142,56 @@ def suspend_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def test_iam_permissions( + def update_display_device_unary( self, - request: Union[compute.TestIamPermissionsInstanceRequest, dict] = None, + request: Union[compute.UpdateDisplayDeviceInstanceRequest, dict] = None, *, project: str = None, zone: str = None, - resource: str = None, - test_permissions_request_resource: compute.TestPermissionsRequest = None, + instance: str = None, + display_device_resource: compute.DisplayDevice = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.TestPermissionsResponse: - r"""Returns permissions that a caller has on the - specified resource. + ) -> compute.Operation: + r"""Updates the Display config for a VM instance. You can + only use this method on a stopped VM instance. This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.TestIamPermissionsInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateDisplayDeviceInstanceRequest, dict]): The request object. A request message for - Instances.TestIamPermissions. See the method description - for details. + Instances.UpdateDisplayDevice. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4635,16 +8204,16 @@ def test_iam_permissions( This corresponds to the ``zone`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this + instance (str): + Name of the instance scoping this request. - This corresponds to the ``resource`` field + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - test_permissions_request_resource (google.cloud.compute_v1.types.TestPermissionsRequest): + display_device_resource (google.cloud.compute_v1.types.DisplayDevice): The body resource for this request - This corresponds to the ``test_permissions_request_resource`` field + This corresponds to the ``display_device_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -4654,15 +8223,15 @@ def test_iam_permissions( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.TestPermissionsResponse: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, zone, resource, test_permissions_request_resource] - ) + has_flattened_params = any([project, zone, instance, display_device_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4670,27 +8239,25 @@ def test_iam_permissions( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.TestIamPermissionsInstanceRequest. + # in a compute.UpdateDisplayDeviceInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.TestIamPermissionsInstanceRequest): - request = compute.TestIamPermissionsInstanceRequest(request) + if not isinstance(request, compute.UpdateDisplayDeviceInstanceRequest): + request = compute.UpdateDisplayDeviceInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if resource is not None: - request.resource = resource - if test_permissions_request_resource is not None: - request.test_permissions_request_resource = ( - test_permissions_request_resource - ) + if instance is not None: + request.instance = instance + if display_device_resource is not None: + request.display_device_resource = display_device_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] + rpc = self._transport._wrapped_methods[self._transport.update_display_device] # Send the request. response = rpc( @@ -4703,28 +8270,28 @@ def test_iam_permissions( # Done; return the response. return response - def update_unary( + def update_display_device( self, - request: Union[compute.UpdateInstanceRequest, dict] = None, + request: Union[compute.UpdateDisplayDeviceInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - instance_resource: compute.Instance = None, + display_device_resource: compute.DisplayDevice = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Updates an instance only if the necessary resources - are available. This method can update only a specific - set of instance properties. See Updating a running - instance for a list of updatable instance properties. + ) -> extended_operation.ExtendedOperation: + r"""Updates the Display config for a VM instance. You can + only use this method on a stopped VM instance. This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.UpdateInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateDisplayDeviceInstanceRequest, dict]): The request object. A request message for - Instances.Update. See the method description for - details. + Instances.UpdateDisplayDevice. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4738,15 +8305,15 @@ def update_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance resource to - update. + Name of the instance scoping this + request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_resource (google.cloud.compute_v1.types.Instance): + display_device_resource (google.cloud.compute_v1.types.DisplayDevice): The body resource for this request - This corresponds to the ``instance_resource`` field + This corresponds to the ``display_device_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -4756,28 +8323,15 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, instance_resource]) + has_flattened_params = any([project, zone, instance, display_device_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -4785,11 +8339,11 @@ def update_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.UpdateInstanceRequest. + # in a compute.UpdateDisplayDeviceInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.UpdateInstanceRequest): - request = compute.UpdateInstanceRequest(request) + if not isinstance(request, compute.UpdateDisplayDeviceInstanceRequest): + request = compute.UpdateDisplayDeviceInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4798,12 +8352,12 @@ def update_unary( request.zone = zone if instance is not None: request.instance = instance - if instance_resource is not None: - request.instance_resource = instance_resource + if display_device_resource is not None: + request.display_device_resource = display_device_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update] + rpc = self._transport._wrapped_methods[self._transport.update_display_device] # Send the request. response = rpc( @@ -4813,32 +8367,60 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def update_access_config_unary( + def update_network_interface_unary( self, - request: Union[compute.UpdateAccessConfigInstanceRequest, dict] = None, + request: Union[compute.UpdateNetworkInterfaceInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, network_interface: str = None, - access_config_resource: compute.AccessConfig = None, + network_interface_resource: compute.NetworkInterface = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Updates the specified access config from an - instance's network interface with the data included in - the request. This method supports PATCH semantics and - uses the JSON merge patch format and processing rules. + r"""Updates an instance's network interface. This method + can only update an interface's alias IP range and + attached network. See Modifying alias IP ranges for an + existing instance for instructions on changing alias IP + ranges. See Migrating a VM between networks for + instructions on migrating an interface. This method + follows PATCH semantics. Args: - request (Union[google.cloud.compute_v1.types.UpdateAccessConfigInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateNetworkInterfaceInstanceRequest, dict]): The request object. A request message for - Instances.UpdateAccessConfig. See the method description - for details. + Instances.UpdateNetworkInterface. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -4857,15 +8439,15 @@ def update_access_config_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. network_interface (str): - The name of the network interface - where the access config is attached. + The name of the network interface to + update. This corresponds to the ``network_interface`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - access_config_resource (google.cloud.compute_v1.types.AccessConfig): + network_interface_resource (google.cloud.compute_v1.types.NetworkInterface): The body resource for this request - This corresponds to the ``access_config_resource`` field + This corresponds to the ``network_interface_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -4875,29 +8457,16 @@ def update_access_config_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, zone, instance, network_interface, access_config_resource] + [project, zone, instance, network_interface, network_interface_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -4906,11 +8475,11 @@ def update_access_config_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.UpdateAccessConfigInstanceRequest. + # in a compute.UpdateNetworkInterfaceInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.UpdateAccessConfigInstanceRequest): - request = compute.UpdateAccessConfigInstanceRequest(request) + if not isinstance(request, compute.UpdateNetworkInterfaceInstanceRequest): + request = compute.UpdateNetworkInterfaceInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -4921,12 +8490,12 @@ def update_access_config_unary( request.instance = instance if network_interface is not None: request.network_interface = network_interface - if access_config_resource is not None: - request.access_config_resource = access_config_resource + if network_interface_resource is not None: + request.network_interface_resource = network_interface_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_access_config] + rpc = self._transport._wrapped_methods[self._transport.update_network_interface] # Send the request. response = rpc( @@ -4939,27 +8508,31 @@ def update_access_config_unary( # Done; return the response. return response - def update_display_device_unary( + def update_network_interface( self, - request: Union[compute.UpdateDisplayDeviceInstanceRequest, dict] = None, + request: Union[compute.UpdateNetworkInterfaceInstanceRequest, dict] = None, *, project: str = None, zone: str = None, instance: str = None, - display_device_resource: compute.DisplayDevice = None, + network_interface: str = None, + network_interface_resource: compute.NetworkInterface = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Updates the Display config for a VM instance. You can - only use this method on a stopped VM instance. This - method supports PATCH semantics and uses the JSON merge - patch format and processing rules. + ) -> extended_operation.ExtendedOperation: + r"""Updates an instance's network interface. This method + can only update an interface's alias IP range and + attached network. See Modifying alias IP ranges for an + existing instance for instructions on changing alias IP + ranges. See Migrating a VM between networks for + instructions on migrating an interface. This method + follows PATCH semantics. Args: - request (Union[google.cloud.compute_v1.types.UpdateDisplayDeviceInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateNetworkInterfaceInstanceRequest, dict]): The request object. A request message for - Instances.UpdateDisplayDevice. See the method + Instances.UpdateNetworkInterface. See the method description for details. project (str): Project ID for this request. @@ -4974,15 +8547,20 @@ def update_display_device_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - Name of the instance scoping this - request. - + The instance name for this request. This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - display_device_resource (google.cloud.compute_v1.types.DisplayDevice): + network_interface (str): + The name of the network interface to + update. + + This corresponds to the ``network_interface`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_interface_resource (google.cloud.compute_v1.types.NetworkInterface): The body resource for this request - This corresponds to the ``display_device_resource`` field + This corresponds to the ``network_interface_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -4992,28 +8570,17 @@ def update_display_device_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, instance, display_device_resource]) + has_flattened_params = any( + [project, zone, instance, network_interface, network_interface_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -5021,11 +8588,11 @@ def update_display_device_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.UpdateDisplayDeviceInstanceRequest. + # in a compute.UpdateNetworkInterfaceInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.UpdateDisplayDeviceInstanceRequest): - request = compute.UpdateDisplayDeviceInstanceRequest(request) + if not isinstance(request, compute.UpdateNetworkInterfaceInstanceRequest): + request = compute.UpdateNetworkInterfaceInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -5034,12 +8601,14 @@ def update_display_device_unary( request.zone = zone if instance is not None: request.instance = instance - if display_device_resource is not None: - request.display_device_resource = display_device_resource + if network_interface is not None: + request.network_interface = network_interface + if network_interface_resource is not None: + request.network_interface_resource = network_interface_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_display_device] + rpc = self._transport._wrapped_methods[self._transport.update_network_interface] # Send the request. response = rpc( @@ -5049,34 +8618,57 @@ def update_display_device_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def update_network_interface_unary( + def update_shielded_instance_config_unary( self, - request: Union[compute.UpdateNetworkInterfaceInstanceRequest, dict] = None, + request: Union[ + compute.UpdateShieldedInstanceConfigInstanceRequest, dict + ] = None, *, project: str = None, zone: str = None, instance: str = None, - network_interface: str = None, - network_interface_resource: compute.NetworkInterface = None, + shielded_instance_config_resource: compute.ShieldedInstanceConfig = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Updates an instance's network interface. This method - can only update an interface's alias IP range and - attached network. See Modifying alias IP ranges for an - existing instance for instructions on changing alias IP - ranges. See Migrating a VM between networks for - instructions on migrating an interface. This method - follows PATCH semantics. + r"""Updates the Shielded Instance config for an instance. + You can only use this method on a stopped instance. This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. Args: - request (Union[google.cloud.compute_v1.types.UpdateNetworkInterfaceInstanceRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdateShieldedInstanceConfigInstanceRequest, dict]): The request object. A request message for - Instances.UpdateNetworkInterface. See the method + Instances.UpdateShieldedInstanceConfig. See the method description for details. project (str): Project ID for this request. @@ -5091,20 +8683,15 @@ def update_network_interface_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance (str): - The instance name for this request. - This corresponds to the ``instance`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - network_interface (str): - The name of the network interface to - update. + Name or id of the instance scoping + this request. - This corresponds to the ``network_interface`` field + This corresponds to the ``instance`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - network_interface_resource (google.cloud.compute_v1.types.NetworkInterface): + shielded_instance_config_resource (google.cloud.compute_v1.types.ShieldedInstanceConfig): The body resource for this request - This corresponds to the ``network_interface_resource`` field + This corresponds to the ``shielded_instance_config_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -5114,29 +8701,16 @@ def update_network_interface_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, zone, instance, network_interface, network_interface_resource] + [project, zone, instance, shielded_instance_config_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -5145,11 +8719,11 @@ def update_network_interface_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.UpdateNetworkInterfaceInstanceRequest. + # in a compute.UpdateShieldedInstanceConfigInstanceRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.UpdateNetworkInterfaceInstanceRequest): - request = compute.UpdateNetworkInterfaceInstanceRequest(request) + if not isinstance(request, compute.UpdateShieldedInstanceConfigInstanceRequest): + request = compute.UpdateShieldedInstanceConfigInstanceRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -5158,14 +8732,16 @@ def update_network_interface_unary( request.zone = zone if instance is not None: request.instance = instance - if network_interface is not None: - request.network_interface = network_interface - if network_interface_resource is not None: - request.network_interface_resource = network_interface_resource + if shielded_instance_config_resource is not None: + request.shielded_instance_config_resource = ( + shielded_instance_config_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_network_interface] + rpc = self._transport._wrapped_methods[ + self._transport.update_shielded_instance_config + ] # Send the request. response = rpc( @@ -5178,7 +8754,7 @@ def update_network_interface_unary( # Done; return the response. return response - def update_shielded_instance_config_unary( + def update_shielded_instance_config( self, request: Union[ compute.UpdateShieldedInstanceConfigInstanceRequest, dict @@ -5191,7 +8767,7 @@ def update_shielded_instance_config_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Updates the Shielded Instance config for an instance. You can only use this method on a stopped instance. This method supports PATCH semantics and uses the JSON merge @@ -5233,22 +8809,9 @@ def update_shielded_instance_config_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -5296,6 +8859,31 @@ def update_shielded_instance_config_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/instances/transports/base.py b/google/cloud/compute_v1/services/instances/transports/base.py index 276bc5069..0b3b75c30 100644 --- a/google/cloud/compute_v1/services/instances/transports/base.py +++ b/google/cloud/compute_v1/services/instances/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -777,5 +780,21 @@ def update_shielded_instance_config( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("InstancesTransport",) diff --git a/google/cloud/compute_v1/services/instances/transports/rest.py b/google/cloud/compute_v1/services/instances/transports/rest.py index 083df274c..86cb56205 100644 --- a/google/cloud/compute_v1/services/instances/transports/rest.py +++ b/google/cloud/compute_v1/services/instances/transports/rest.py @@ -6956,6 +6956,10 @@ def update_shielded_instance_config( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/interconnect_attachments/client.py b/google/cloud/compute_v1/services/interconnect_attachments/client.py index d384a485c..a5b000c84 100644 --- a/google/cloud/compute_v1/services/interconnect_attachments/client.py +++ b/google/cloud/compute_v1/services/interconnect_attachments/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.interconnect_attachments import pagers from google.cloud.compute_v1.types import compute from .transports.base import InterconnectAttachmentsTransport, DEFAULT_CLIENT_INFO @@ -528,22 +531,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -586,6 +576,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteInterconnectAttachmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + interconnect_attachment: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified interconnect attachment. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteInterconnectAttachmentRequest, dict]): + The request object. A request message for + InterconnectAttachments.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect_attachment (str): + Name of the interconnect attachment + to delete. + + This corresponds to the ``interconnect_attachment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, interconnect_attachment]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteInterconnectAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteInterconnectAttachmentRequest): + request = compute.DeleteInterconnectAttachmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if interconnect_attachment is not None: + request.interconnect_attachment = interconnect_attachment + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetInterconnectAttachmentRequest, dict] = None, @@ -720,22 +822,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -780,6 +869,119 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertInterconnectAttachmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + interconnect_attachment_resource: compute.InterconnectAttachment = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an InterconnectAttachment in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInterconnectAttachmentRequest, dict]): + The request object. A request message for + InterconnectAttachments.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect_attachment_resource (google.cloud.compute_v1.types.InterconnectAttachment): + The body resource for this request + This corresponds to the ``interconnect_attachment_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, interconnect_attachment_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInterconnectAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInterconnectAttachmentRequest): + request = compute.InsertInterconnectAttachmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if interconnect_attachment_resource is not None: + request.interconnect_attachment_resource = ( + interconnect_attachment_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListInterconnectAttachmentsRequest, dict] = None, @@ -923,22 +1125,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -987,6 +1176,135 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchInterconnectAttachmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + interconnect_attachment: str = None, + interconnect_attachment_resource: compute.InterconnectAttachment = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified interconnect attachment with + the data included in the request. This method supports + PATCH semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchInterconnectAttachmentRequest, dict]): + The request object. A request message for + InterconnectAttachments.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect_attachment (str): + Name of the interconnect attachment + to patch. + + This corresponds to the ``interconnect_attachment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect_attachment_resource (google.cloud.compute_v1.types.InterconnectAttachment): + The body resource for this request + This corresponds to the ``interconnect_attachment_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, interconnect_attachment, interconnect_attachment_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchInterconnectAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchInterconnectAttachmentRequest): + request = compute.PatchInterconnectAttachmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if interconnect_attachment is not None: + request.interconnect_attachment = interconnect_attachment + if interconnect_attachment_resource is not None: + request.interconnect_attachment_resource = ( + interconnect_attachment_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/interconnect_attachments/transports/base.py b/google/cloud/compute_v1/services/interconnect_attachments/transports/base.py index a93486cd4..bd497c3c4 100644 --- a/google/cloud/compute_v1/services/interconnect_attachments/transports/base.py +++ b/google/cloud/compute_v1/services/interconnect_attachments/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -226,5 +229,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("InterconnectAttachmentsTransport",) diff --git a/google/cloud/compute_v1/services/interconnect_attachments/transports/rest.py b/google/cloud/compute_v1/services/interconnect_attachments/transports/rest.py index c79cb66b2..d357adecc 100644 --- a/google/cloud/compute_v1/services/interconnect_attachments/transports/rest.py +++ b/google/cloud/compute_v1/services/interconnect_attachments/transports/rest.py @@ -1049,6 +1049,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/interconnect_locations/client.py b/google/cloud/compute_v1/services/interconnect_locations/client.py index 9390572f5..9246c6c42 100644 --- a/google/cloud/compute_v1/services/interconnect_locations/client.py +++ b/google/cloud/compute_v1/services/interconnect_locations/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/interconnect_locations/transports/base.py b/google/cloud/compute_v1/services/interconnect_locations/transports/base.py index 2d1ecba58..cc72fa009 100644 --- a/google/cloud/compute_v1/services/interconnect_locations/transports/base.py +++ b/google/cloud/compute_v1/services/interconnect_locations/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -166,5 +167,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("InterconnectLocationsTransport",) diff --git a/google/cloud/compute_v1/services/interconnect_locations/transports/rest.py b/google/cloud/compute_v1/services/interconnect_locations/transports/rest.py index 00ac29ebc..7b19166e0 100644 --- a/google/cloud/compute_v1/services/interconnect_locations/transports/rest.py +++ b/google/cloud/compute_v1/services/interconnect_locations/transports/rest.py @@ -450,6 +450,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/interconnects/client.py b/google/cloud/compute_v1/services/interconnects/client.py index e714f1b3e..652fb61b3 100644 --- a/google/cloud/compute_v1/services/interconnects/client.py +++ b/google/cloud/compute_v1/services/interconnects/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.interconnects import pagers from google.cloud.compute_v1.types import compute from .transports.base import InterconnectsTransport, DEFAULT_CLIENT_INFO @@ -434,22 +437,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -490,6 +480,107 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteInterconnectRequest, dict] = None, + *, + project: str = None, + interconnect: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified interconnect. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteInterconnectRequest, dict]): + The request object. A request message for + Interconnects.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect (str): + Name of the interconnect to delete. + This corresponds to the ``interconnect`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, interconnect]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteInterconnectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteInterconnectRequest): + request = compute.DeleteInterconnectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if interconnect is not None: + request.interconnect = interconnect + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetInterconnectRequest, dict] = None, @@ -687,22 +778,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -743,6 +821,108 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertInterconnectRequest, dict] = None, + *, + project: str = None, + interconnect_resource: compute.Interconnect = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a Interconnect in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertInterconnectRequest, dict]): + The request object. A request message for + Interconnects.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect_resource (google.cloud.compute_v1.types.Interconnect): + The body resource for this request + This corresponds to the ``interconnect_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, interconnect_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertInterconnectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertInterconnectRequest): + request = compute.InsertInterconnectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if interconnect_resource is not None: + request.interconnect_resource = interconnect_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListInterconnectsRequest, dict] = None, @@ -868,22 +1048,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -926,6 +1093,118 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchInterconnectRequest, dict] = None, + *, + project: str = None, + interconnect: str = None, + interconnect_resource: compute.Interconnect = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified interconnect with the data + included in the request. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchInterconnectRequest, dict]): + The request object. A request message for + Interconnects.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect (str): + Name of the interconnect to update. + This corresponds to the ``interconnect`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + interconnect_resource (google.cloud.compute_v1.types.Interconnect): + The body resource for this request + This corresponds to the ``interconnect_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, interconnect, interconnect_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchInterconnectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchInterconnectRequest): + request = compute.PatchInterconnectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if interconnect is not None: + request.interconnect = interconnect + if interconnect_resource is not None: + request.interconnect_resource = interconnect_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/interconnects/transports/base.py b/google/cloud/compute_v1/services/interconnects/transports/base.py index 116fc1d83..014ee925a 100644 --- a/google/cloud/compute_v1/services/interconnects/transports/base.py +++ b/google/cloud/compute_v1/services/interconnects/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -221,5 +224,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("InterconnectsTransport",) diff --git a/google/cloud/compute_v1/services/interconnects/transports/rest.py b/google/cloud/compute_v1/services/interconnects/transports/rest.py index e645a9287..4329a3a86 100644 --- a/google/cloud/compute_v1/services/interconnects/transports/rest.py +++ b/google/cloud/compute_v1/services/interconnects/transports/rest.py @@ -1026,6 +1026,10 @@ def patch(self) -> Callable[[compute.PatchInterconnectRequest], compute.Operatio # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/license_codes/client.py b/google/cloud/compute_v1/services/license_codes/client.py index 529e7dee0..d40a2de7c 100644 --- a/google/cloud/compute_v1/services/license_codes/client.py +++ b/google/cloud/compute_v1/services/license_codes/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/license_codes/transports/base.py b/google/cloud/compute_v1/services/license_codes/transports/base.py index 4549127cc..a4e0bec56 100644 --- a/google/cloud/compute_v1/services/license_codes/transports/base.py +++ b/google/cloud/compute_v1/services/license_codes/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -165,5 +166,9 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("LicenseCodesTransport",) diff --git a/google/cloud/compute_v1/services/license_codes/transports/rest.py b/google/cloud/compute_v1/services/license_codes/transports/rest.py index 253f62f76..8d96df1e9 100644 --- a/google/cloud/compute_v1/services/license_codes/transports/rest.py +++ b/google/cloud/compute_v1/services/license_codes/transports/rest.py @@ -446,6 +446,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/licenses/client.py b/google/cloud/compute_v1/services/licenses/client.py index 5defa8590..4ec5688ee 100644 --- a/google/cloud/compute_v1/services/licenses/client.py +++ b/google/cloud/compute_v1/services/licenses/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.licenses import pagers from google.cloud.compute_v1.types import compute from .transports.base import LicensesTransport, DEFAULT_CLIENT_INFO @@ -437,22 +440,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -493,6 +483,110 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteLicenseRequest, dict] = None, + *, + project: str = None, + license_: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified license. *Caution* This resource is + intended for use only by third-party partners who are creating + Cloud Marketplace images. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteLicenseRequest, dict]): + The request object. A request message for + Licenses.Delete. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + license_ (str): + Name of the license resource to + delete. + + This corresponds to the ``license_`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, license_]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteLicenseRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteLicenseRequest): + request = compute.DeleteLicenseRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if license_ is not None: + request.license_ = license_ + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetLicenseRequest, dict] = None, @@ -731,22 +825,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -787,6 +868,108 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertLicenseRequest, dict] = None, + *, + project: str = None, + license_resource: compute.License = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Create a License resource in the specified project. *Caution* + This resource is intended for use only by third-party partners + who are creating Cloud Marketplace images. + + Args: + request (Union[google.cloud.compute_v1.types.InsertLicenseRequest, dict]): + The request object. A request message for + Licenses.Insert. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + license_resource (google.cloud.compute_v1.types.License): + The body resource for this request + This corresponds to the ``license_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, license_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertLicenseRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertLicenseRequest): + request = compute.InsertLicenseRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if license_resource is not None: + request.license_resource = license_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListLicensesRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/licenses/transports/base.py b/google/cloud/compute_v1/services/licenses/transports/base.py index 7c8345708..09c2984e4 100644 --- a/google/cloud/compute_v1/services/licenses/transports/base.py +++ b/google/cloud/compute_v1/services/licenses/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -233,5 +236,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("LicensesTransport",) diff --git a/google/cloud/compute_v1/services/licenses/transports/rest.py b/google/cloud/compute_v1/services/licenses/transports/rest.py index eedf243dd..59b381a63 100644 --- a/google/cloud/compute_v1/services/licenses/transports/rest.py +++ b/google/cloud/compute_v1/services/licenses/transports/rest.py @@ -1213,6 +1213,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/machine_images/client.py b/google/cloud/compute_v1/services/machine_images/client.py index 0a45d4157..ad9cedc75 100644 --- a/google/cloud/compute_v1/services/machine_images/client.py +++ b/google/cloud/compute_v1/services/machine_images/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.machine_images import pagers from google.cloud.compute_v1.types import compute from .transports.base import MachineImagesTransport, DEFAULT_CLIENT_INFO @@ -437,22 +440,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -493,6 +483,110 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteMachineImageRequest, dict] = None, + *, + project: str = None, + machine_image: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified machine image. Deleting a + machine image is permanent and cannot be undone. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteMachineImageRequest, dict]): + The request object. A request message for + MachineImages.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + machine_image (str): + The name of the machine image to + delete. + + This corresponds to the ``machine_image`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, machine_image]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteMachineImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteMachineImageRequest): + request = compute.DeleteMachineImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if machine_image is not None: + request.machine_image = machine_image + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetMachineImageRequest, dict] = None, @@ -734,22 +828,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -790,6 +871,112 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertMachineImageRequest, dict] = None, + *, + project: str = None, + machine_image_resource: compute.MachineImage = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a machine image in the specified project + using the data that is included in the request. If you + are creating a new machine image to update an existing + instance, your new machine image should use the same + network or, if applicable, the same subnetwork as the + original instance. + + Args: + request (Union[google.cloud.compute_v1.types.InsertMachineImageRequest, dict]): + The request object. A request message for + MachineImages.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + machine_image_resource (google.cloud.compute_v1.types.MachineImage): + The body resource for this request + This corresponds to the ``machine_image_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, machine_image_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertMachineImageRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertMachineImageRequest): + request = compute.InsertMachineImageRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if machine_image_resource is not None: + request.machine_image_resource = machine_image_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListMachineImagesRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/machine_images/transports/base.py b/google/cloud/compute_v1/services/machine_images/transports/base.py index 575f1e77f..39973c130 100644 --- a/google/cloud/compute_v1/services/machine_images/transports/base.py +++ b/google/cloud/compute_v1/services/machine_images/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -234,5 +237,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("MachineImagesTransport",) diff --git a/google/cloud/compute_v1/services/machine_images/transports/rest.py b/google/cloud/compute_v1/services/machine_images/transports/rest.py index b0f73bfad..4698f055b 100644 --- a/google/cloud/compute_v1/services/machine_images/transports/rest.py +++ b/google/cloud/compute_v1/services/machine_images/transports/rest.py @@ -1237,6 +1237,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/machine_types/client.py b/google/cloud/compute_v1/services/machine_types/client.py index 5bfc729b1..a4d11b248 100644 --- a/google/cloud/compute_v1/services/machine_types/client.py +++ b/google/cloud/compute_v1/services/machine_types/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/machine_types/transports/base.py b/google/cloud/compute_v1/services/machine_types/transports/base.py index 350a43f69..08ac22eb0 100644 --- a/google/cloud/compute_v1/services/machine_types/transports/base.py +++ b/google/cloud/compute_v1/services/machine_types/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -180,5 +181,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("MachineTypesTransport",) diff --git a/google/cloud/compute_v1/services/machine_types/transports/rest.py b/google/cloud/compute_v1/services/machine_types/transports/rest.py index 10ce6e55d..ada93cd2e 100644 --- a/google/cloud/compute_v1/services/machine_types/transports/rest.py +++ b/google/cloud/compute_v1/services/machine_types/transports/rest.py @@ -563,6 +563,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/network_edge_security_services/client.py b/google/cloud/compute_v1/services/network_edge_security_services/client.py index 92c6d3f25..cd5329b0d 100644 --- a/google/cloud/compute_v1/services/network_edge_security_services/client.py +++ b/google/cloud/compute_v1/services/network_edge_security_services/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.network_edge_security_services import pagers from google.cloud.compute_v1.types import compute from .transports.base import NetworkEdgeSecurityServicesTransport, DEFAULT_CLIENT_INFO @@ -534,22 +537,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -592,6 +582,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteNetworkEdgeSecurityServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + network_edge_security_service: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified service. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNetworkEdgeSecurityServiceRequest, dict]): + The request object. A request message for + NetworkEdgeSecurityServices.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_edge_security_service (str): + Name of the network edge security + service to delete. + + This corresponds to the ``network_edge_security_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, network_edge_security_service]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNetworkEdgeSecurityServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNetworkEdgeSecurityServiceRequest): + request = compute.DeleteNetworkEdgeSecurityServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if network_edge_security_service is not None: + request.network_edge_security_service = network_edge_security_service + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetNetworkEdgeSecurityServiceRequest, dict] = None, @@ -724,22 +828,101 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, network_edge_security_service_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertNetworkEdgeSecurityServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertNetworkEdgeSecurityServiceRequest): + request = compute.InsertNetworkEdgeSecurityServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if network_edge_security_service_resource is not None: + request.network_edge_security_service_resource = ( + network_edge_security_service_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertNetworkEdgeSecurityServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + network_edge_security_service_resource: compute.NetworkEdgeSecurityService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new service in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNetworkEdgeSecurityServiceRequest, dict]): + The request object. A request message for + NetworkEdgeSecurityServices.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_edge_security_service_resource (google.cloud.compute_v1.types.NetworkEdgeSecurityService): + The body resource for this request + This corresponds to the ``network_edge_security_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -783,6 +966,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -837,22 +1045,116 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + network_edge_security_service, + network_edge_security_service_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchNetworkEdgeSecurityServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchNetworkEdgeSecurityServiceRequest): + request = compute.PatchNetworkEdgeSecurityServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if network_edge_security_service is not None: + request.network_edge_security_service = network_edge_security_service + if network_edge_security_service_resource is not None: + request.network_edge_security_service_resource = ( + network_edge_security_service_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchNetworkEdgeSecurityServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + network_edge_security_service: str = None, + network_edge_security_service_resource: compute.NetworkEdgeSecurityService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified policy with the data included + in the request. + + Args: + request (Union[google.cloud.compute_v1.types.PatchNetworkEdgeSecurityServiceRequest, dict]): + The request object. A request message for + NetworkEdgeSecurityServices.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_edge_security_service (str): + Name of the network edge security + service to update. + + This corresponds to the ``network_edge_security_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_edge_security_service_resource (google.cloud.compute_v1.types.NetworkEdgeSecurityService): + The body resource for this request + This corresponds to the ``network_edge_security_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -903,6 +1205,31 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/network_edge_security_services/transports/base.py b/google/cloud/compute_v1/services/network_edge_security_services/transports/base.py index e4f1f6cbd..2ab5a47a3 100644 --- a/google/cloud/compute_v1/services/network_edge_security_services/transports/base.py +++ b/google/cloud/compute_v1/services/network_edge_security_services/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -210,5 +213,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("NetworkEdgeSecurityServicesTransport",) diff --git a/google/cloud/compute_v1/services/network_edge_security_services/transports/rest.py b/google/cloud/compute_v1/services/network_edge_security_services/transports/rest.py index 8e3892f94..7f79bfcd6 100644 --- a/google/cloud/compute_v1/services/network_edge_security_services/transports/rest.py +++ b/google/cloud/compute_v1/services/network_edge_security_services/transports/rest.py @@ -919,6 +919,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/network_endpoint_groups/client.py b/google/cloud/compute_v1/services/network_endpoint_groups/client.py index de607c012..ae1d7f9fd 100644 --- a/google/cloud/compute_v1/services/network_endpoint_groups/client.py +++ b/google/cloud/compute_v1/services/network_endpoint_groups/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.network_endpoint_groups import pagers from google.cloud.compute_v1.types import compute from .transports.base import NetworkEndpointGroupsTransport, DEFAULT_CLIENT_INFO @@ -538,22 +541,9 @@ def attach_network_endpoints_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -609,6 +599,145 @@ def attach_network_endpoints_unary( # Done; return the response. return response + def attach_network_endpoints( + self, + request: Union[ + compute.AttachNetworkEndpointsNetworkEndpointGroupRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + network_endpoint_group: str = None, + network_endpoint_groups_attach_endpoints_request_resource: compute.NetworkEndpointGroupsAttachEndpointsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Attach a list of network endpoints to the specified + network endpoint group. + + Args: + request (Union[google.cloud.compute_v1.types.AttachNetworkEndpointsNetworkEndpointGroupRequest, dict]): + The request object. A request message for + NetworkEndpointGroups.AttachNetworkEndpoints. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + network endpoint group is located. It + should comply with RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group where you are attaching network + endpoints to. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_groups_attach_endpoints_request_resource (google.cloud.compute_v1.types.NetworkEndpointGroupsAttachEndpointsRequest): + The body resource for this request + This corresponds to the ``network_endpoint_groups_attach_endpoints_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + network_endpoint_group, + network_endpoint_groups_attach_endpoints_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AttachNetworkEndpointsNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.AttachNetworkEndpointsNetworkEndpointGroupRequest + ): + request = compute.AttachNetworkEndpointsNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + if network_endpoint_groups_attach_endpoints_request_resource is not None: + request.network_endpoint_groups_attach_endpoints_request_resource = ( + network_endpoint_groups_attach_endpoints_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.attach_network_endpoints] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def delete_unary( self, request: Union[compute.DeleteNetworkEndpointGroupRequest, dict] = None, @@ -659,22 +788,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -717,6 +833,126 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteNetworkEndpointGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + network_endpoint_group: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified network endpoint group. The + network endpoints in the NEG and the VM instances they + belong to are not terminated when the NEG is deleted. + Note that the NEG cannot be deleted if there are backend + services referencing it. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNetworkEndpointGroupRequest, dict]): + The request object. A request message for + NetworkEndpointGroups.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + network endpoint group is located. It + should comply with RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group to delete. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, network_endpoint_group]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNetworkEndpointGroupRequest): + request = compute.DeleteNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def detach_network_endpoints_unary( self, request: Union[ @@ -773,22 +1009,9 @@ def detach_network_endpoints_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -844,6 +1067,145 @@ def detach_network_endpoints_unary( # Done; return the response. return response + def detach_network_endpoints( + self, + request: Union[ + compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, dict + ] = None, + *, + project: str = None, + zone: str = None, + network_endpoint_group: str = None, + network_endpoint_groups_detach_endpoints_request_resource: compute.NetworkEndpointGroupsDetachEndpointsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Detach a list of network endpoints from the specified + network endpoint group. + + Args: + request (Union[google.cloud.compute_v1.types.DetachNetworkEndpointsNetworkEndpointGroupRequest, dict]): + The request object. A request message for + NetworkEndpointGroups.DetachNetworkEndpoints. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where the + network endpoint group is located. It + should comply with RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group where you are removing network + endpoints. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_groups_detach_endpoints_request_resource (google.cloud.compute_v1.types.NetworkEndpointGroupsDetachEndpointsRequest): + The body resource for this request + This corresponds to the ``network_endpoint_groups_detach_endpoints_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + zone, + network_endpoint_group, + network_endpoint_groups_detach_endpoints_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DetachNetworkEndpointsNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.DetachNetworkEndpointsNetworkEndpointGroupRequest + ): + request = compute.DetachNetworkEndpointsNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + if network_endpoint_groups_detach_endpoints_request_resource is not None: + request.network_endpoint_groups_detach_endpoints_request_resource = ( + network_endpoint_groups_detach_endpoints_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.detach_network_endpoints] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetNetworkEndpointGroupRequest, dict] = None, @@ -990,22 +1352,101 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, network_endpoint_group_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertNetworkEndpointGroupRequest): + request = compute.InsertNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if network_endpoint_group_resource is not None: + request.network_endpoint_group_resource = ( + network_endpoint_group_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertNetworkEndpointGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + network_endpoint_group_resource: compute.NetworkEndpointGroup = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a network endpoint group in the specified + project using the parameters that are included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNetworkEndpointGroupRequest, dict]): + The request object. A request message for + NetworkEndpointGroups.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone where you want + to create the network endpoint group. It + should comply with RFC1035. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group_resource (google.cloud.compute_v1.types.NetworkEndpointGroup): + The body resource for this request + This corresponds to the ``network_endpoint_group_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1047,6 +1488,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/network_endpoint_groups/transports/base.py b/google/cloud/compute_v1/services/network_endpoint_groups/transports/base.py index 4159b7958..e46e01941 100644 --- a/google/cloud/compute_v1/services/network_endpoint_groups/transports/base.py +++ b/google/cloud/compute_v1/services/network_endpoint_groups/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -271,5 +274,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("NetworkEndpointGroupsTransport",) diff --git a/google/cloud/compute_v1/services/network_endpoint_groups/transports/rest.py b/google/cloud/compute_v1/services/network_endpoint_groups/transports/rest.py index b7628b98c..8882c48fb 100644 --- a/google/cloud/compute_v1/services/network_endpoint_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/network_endpoint_groups/transports/rest.py @@ -1538,6 +1538,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/network_firewall_policies/client.py b/google/cloud/compute_v1/services/network_firewall_policies/client.py index ef9e587eb..672b24e7e 100644 --- a/google/cloud/compute_v1/services/network_firewall_policies/client.py +++ b/google/cloud/compute_v1/services/network_firewall_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.network_firewall_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import NetworkFirewallPoliciesTransport, DEFAULT_CLIENT_INFO @@ -445,22 +448,9 @@ def add_association_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -507,23 +497,24 @@ def add_association_unary( # Done; return the response. return response - def add_rule_unary( + def add_association( self, - request: Union[compute.AddRuleNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.AddAssociationNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, - firewall_policy_rule_resource: compute.FirewallPolicyRule = None, + firewall_policy_association_resource: compute.FirewallPolicyAssociation = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Inserts a rule into a firewall policy. + ) -> extended_operation.ExtendedOperation: + r"""Inserts an association for the specified firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.AddRuleNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddAssociationNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.AddRule. See the method + NetworkFirewallPolicies.AddAssociation. See the method description for details. project (str): Project ID for this request. @@ -537,9 +528,9 @@ def add_rule_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + firewall_policy_association_resource (google.cloud.compute_v1.types.FirewallPolicyAssociation): The body resource for this request - This corresponds to the ``firewall_policy_rule_resource`` field + This corresponds to the ``firewall_policy_association_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -549,29 +540,16 @@ def add_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, firewall_policy, firewall_policy_rule_resource] + [project, firewall_policy, firewall_policy_association_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -580,23 +558,25 @@ def add_rule_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.AddRuleNetworkFirewallPolicyRequest. + # in a compute.AddAssociationNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.AddRuleNetworkFirewallPolicyRequest): - request = compute.AddRuleNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.AddAssociationNetworkFirewallPolicyRequest): + request = compute.AddAssociationNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_rule_resource is not None: - request.firewall_policy_rule_resource = firewall_policy_rule_resource + if firewall_policy_association_resource is not None: + request.firewall_policy_association_resource = ( + firewall_policy_association_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.add_rule] + rpc = self._transport._wrapped_methods[self._transport.add_association] # Send the request. response = rpc( @@ -606,25 +586,50 @@ def add_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def clone_rules_unary( + def add_rule_unary( self, - request: Union[compute.CloneRulesNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.AddRuleNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Copies rules to the specified firewall policy. + r"""Inserts a rule into a firewall policy. Args: - request (Union[google.cloud.compute_v1.types.CloneRulesNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddRuleNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.CloneRules. See the method + NetworkFirewallPolicies.AddRule. See the method description for details. project (str): Project ID for this request. @@ -638,6 +643,11 @@ def clone_rules_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -645,28 +655,17 @@ def clone_rules_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, firewall_policy]) + has_flattened_params = any( + [project, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -674,21 +673,23 @@ def clone_rules_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.CloneRulesNetworkFirewallPolicyRequest. + # in a compute.AddRuleNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.CloneRulesNetworkFirewallPolicyRequest): - request = compute.CloneRulesNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.AddRuleNetworkFirewallPolicyRequest): + request = compute.AddRuleNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.clone_rules] + rpc = self._transport._wrapped_methods[self._transport.add_rule] # Send the request. response = rpc( @@ -701,22 +702,23 @@ def clone_rules_unary( # Done; return the response. return response - def delete_unary( + def add_rule( self, - request: Union[compute.DeleteNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.AddRuleNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes the specified policy. + ) -> extended_operation.ExtendedOperation: + r"""Inserts a rule into a firewall policy. Args: - request (Union[google.cloud.compute_v1.types.DeleteNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddRuleNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.Delete. See the method + NetworkFirewallPolicies.AddRule. See the method description for details. project (str): Project ID for this request. @@ -725,11 +727,16 @@ def delete_unary( should not be set. firewall_policy (str): Name of the firewall policy to - delete. + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -737,28 +744,17 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, firewall_policy]) + has_flattened_params = any( + [project, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -766,21 +762,23 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteNetworkFirewallPolicyRequest. + # in a compute.AddRuleNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteNetworkFirewallPolicyRequest): - request = compute.DeleteNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.AddRuleNetworkFirewallPolicyRequest): + request = compute.AddRuleNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.add_rule] # Send the request. response = rpc( @@ -790,33 +788,59 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get( + def clone_rules_unary( self, - request: Union[compute.GetNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.CloneRulesNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicy: - r"""Returns the specified network firewall policy. + ) -> compute.Operation: + r"""Copies rules to the specified firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.CloneRulesNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.Get. See the method description - for details. + NetworkFirewallPolicies.CloneRules. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. firewall_policy (str): - Name of the firewall policy to get. + Name of the firewall policy to + update. + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -827,9 +851,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicy: - Represents a Firewall Policy - resource. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -843,11 +867,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetNetworkFirewallPolicyRequest. + # in a compute.CloneRulesNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetNetworkFirewallPolicyRequest): - request = compute.GetNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.CloneRulesNetworkFirewallPolicyRequest): + request = compute.CloneRulesNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -857,7 +881,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.clone_rules] # Send the request. response = rpc( @@ -870,22 +894,22 @@ def get( # Done; return the response. return response - def get_association( + def clone_rules( self, - request: Union[compute.GetAssociationNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.CloneRulesNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicyAssociation: - r"""Gets an association with the specified name. + ) -> extended_operation.ExtendedOperation: + r"""Copies rules to the specified firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetAssociationNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.CloneRulesNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.GetAssociation. See the method + NetworkFirewallPolicies.CloneRules. See the method description for details. project (str): Project ID for this request. @@ -893,8 +917,8 @@ def get_association( on the ``request`` instance; if ``request`` is provided, this should not be set. firewall_policy (str): - Name of the firewall policy to which - the queried association belongs. + Name of the firewall policy to + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this @@ -906,7 +930,9 @@ def get_association( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicyAssociation: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -920,11 +946,11 @@ def get_association( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetAssociationNetworkFirewallPolicyRequest. + # in a compute.CloneRulesNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetAssociationNetworkFirewallPolicyRequest): - request = compute.GetAssociationNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.CloneRulesNetworkFirewallPolicyRequest): + request = compute.CloneRulesNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -934,7 +960,7 @@ def get_association( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_association] + rpc = self._transport._wrapped_methods[self._transport.clone_rules] # Send the request. response = rpc( @@ -944,37 +970,60 @@ def get_association( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_iam_policy( + def delete_unary( self, - request: Union[compute.GetIamPolicyNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.DeleteNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, - resource: str = None, + firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Gets the access control policy for a resource. May be - empty if no such policy or resource exists. + ) -> compute.Operation: + r"""Deletes the specified policy. Args: - request (Union[google.cloud.compute_v1.types.GetIamPolicyNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.GetIamPolicy. See the method + NetworkFirewallPolicies.Delete. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this - request. + firewall_policy (str): + Name of the firewall policy to + delete. - This corresponds to the ``resource`` field + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -984,53 +1033,15 @@ def get_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, - see the [IAM - documentation](\ https://cloud.google.com/iam/docs/). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, resource]) + has_flattened_params = any([project, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1038,21 +1049,825 @@ def get_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetIamPolicyNetworkFirewallPolicyRequest. + # in a compute.DeleteNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetIamPolicyNetworkFirewallPolicyRequest): - request = compute.GetIamPolicyNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.DeleteNetworkFirewallPolicyRequest): + request = compute.DeleteNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if resource is not None: - request.resource = resource + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified policy. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to + delete. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNetworkFirewallPolicyRequest): + request = compute.DeleteNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicy: + r"""Returns the specified network firewall policy. + + Args: + request (Union[google.cloud.compute_v1.types.GetNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.Get. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to get. + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicy: + Represents a Firewall Policy + resource. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetNetworkFirewallPolicyRequest): + request = compute.GetNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_association( + self, + request: Union[compute.GetAssociationNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicyAssociation: + r"""Gets an association with the specified name. + + Args: + request (Union[google.cloud.compute_v1.types.GetAssociationNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.GetAssociation. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to which + the queried association belongs. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicyAssociation: + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetAssociationNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetAssociationNetworkFirewallPolicyRequest): + request = compute.GetAssociationNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_association] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Gets the access control policy for a resource. May be + empty if no such policy or resource exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetIamPolicyNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.GetIamPolicy. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, + see the [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetIamPolicyNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyNetworkFirewallPolicyRequest): + request = compute.GetIamPolicyNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_rule( + self, + request: Union[compute.GetRuleNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicyRule: + r"""Gets a rule of the specified priority. + + Args: + request (Union[google.cloud.compute_v1.types.GetRuleNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.GetRule. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to which + the queried rule belongs. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicyRule: + Represents a rule that describes one + or more match conditions along with the + action to be taken when traffic matches + this condition (allow or deny). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetRuleNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRuleNetworkFirewallPolicyRequest): + request = compute.GetRuleNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_rule] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a new policy in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertNetworkFirewallPolicyRequest): + request = compute.InsertNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new policy in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertNetworkFirewallPolicyRequest): + request = compute.InsertNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListNetworkFirewallPoliciesRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Lists all the policies that have been configured for + the specified project. + + Args: + request (Union[google.cloud.compute_v1.types.ListNetworkFirewallPoliciesRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.List. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.network_firewall_policies.pagers.ListPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListNetworkFirewallPoliciesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListNetworkFirewallPoliciesRequest): + request = compute.ListNetworkFirewallPoliciesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + firewall_policy: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Patches the specified policy with the data included + in the request. + + Args: + request (Union[google.cloud.compute_v1.types.PatchNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + NetworkFirewallPolicies.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, firewall_policy, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchNetworkFirewallPolicyRequest): + request = compute.PatchNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1065,22 +1880,24 @@ def get_iam_policy( # Done; return the response. return response - def get_rule( + def patch( self, - request: Union[compute.GetRuleNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.PatchNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicyRule: - r"""Gets a rule of the specified priority. + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified policy with the data included + in the request. Args: - request (Union[google.cloud.compute_v1.types.GetRuleNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.GetRule. See the method + NetworkFirewallPolicies.Patch. See the method description for details. project (str): Project ID for this request. @@ -1088,12 +1905,17 @@ def get_rule( on the ``request`` instance; if ``request`` is provided, this should not be set. firewall_policy (str): - Name of the firewall policy to which - the queried rule belongs. + Name of the firewall policy to + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1101,17 +1923,15 @@ def get_rule( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicyRule: - Represents a rule that describes one - or more match conditions along with the - action to be taken when traffic matches - this condition (allow or deny). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, firewall_policy]) + has_flattened_params = any([project, firewall_policy, firewall_policy_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1119,21 +1939,23 @@ def get_rule( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetRuleNetworkFirewallPolicyRequest. + # in a compute.PatchNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetRuleNetworkFirewallPolicyRequest): - request = compute.GetRuleNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchNetworkFirewallPolicyRequest): + request = compute.PatchNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_rule] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1143,35 +1965,66 @@ def get_rule( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def insert_unary( + def patch_rule_unary( self, - request: Union[compute.InsertNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.PatchRuleNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, - firewall_policy_resource: compute.FirewallPolicy = None, + firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Creates a new policy in the specified project using - the data included in the request. + r"""Patches a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.InsertNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRuleNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.Insert. See the method + NetworkFirewallPolicies.PatchRule. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): The body resource for this request - This corresponds to the ``firewall_policy_resource`` field + This corresponds to the ``firewall_policy_rule_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1181,28 +2034,17 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, firewall_policy_resource]) + has_flattened_params = any( + [project, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1210,21 +2052,23 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertNetworkFirewallPolicyRequest. + # in a compute.PatchRuleNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertNetworkFirewallPolicyRequest): - request = compute.InsertNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchRuleNetworkFirewallPolicyRequest): + request = compute.PatchRuleNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if firewall_policy_resource is not None: - request.firewall_policy_resource = firewall_policy_resource + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.patch_rule] # Send the request. response = rpc( @@ -1237,28 +2081,41 @@ def insert_unary( # Done; return the response. return response - def list( + def patch_rule( self, - request: Union[compute.ListNetworkFirewallPoliciesRequest, dict] = None, + request: Union[compute.PatchRuleNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, + firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Lists all the policies that have been configured for - the specified project. + ) -> extended_operation.ExtendedOperation: + r"""Patches a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.ListNetworkFirewallPoliciesRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRuleNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.List. See the method description - for details. + NetworkFirewallPolicies.PatchRule. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1266,16 +2123,17 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.network_firewall_policies.pagers.ListPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project]) + has_flattened_params = any( + [project, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1283,19 +2141,23 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListNetworkFirewallPoliciesRequest. + # in a compute.PatchRuleNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListNetworkFirewallPoliciesRequest): - request = compute.ListNetworkFirewallPoliciesRequest(request) + if not isinstance(request, compute.PatchRuleNetworkFirewallPolicyRequest): + request = compute.PatchRuleNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.patch_rule] # Send the request. response = rpc( @@ -1305,37 +2167,53 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def patch_unary( + def remove_association_unary( self, - request: Union[compute.PatchNetworkFirewallPolicyRequest, dict] = None, + request: Union[ + compute.RemoveAssociationNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, firewall_policy: str = None, - firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Patches the specified policy with the data included - in the request. + r"""Removes an association for the specified firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.PatchNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveAssociationNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.Patch. See the method - description for details. + NetworkFirewallPolicies.RemoveAssociation. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1348,11 +2226,6 @@ def patch_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): - The body resource for this request - This corresponds to the ``firewall_policy_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1360,28 +2233,15 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, firewall_policy, firewall_policy_resource]) + has_flattened_params = any([project, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1389,23 +2249,23 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchNetworkFirewallPolicyRequest. + # in a compute.RemoveAssociationNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchNetworkFirewallPolicyRequest): - request = compute.PatchNetworkFirewallPolicyRequest(request) + if not isinstance( + request, compute.RemoveAssociationNetworkFirewallPolicyRequest + ): + request = compute.RemoveAssociationNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_resource is not None: - request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.remove_association] # Send the request. response = rpc( @@ -1418,24 +2278,26 @@ def patch_unary( # Done; return the response. return response - def patch_rule_unary( + def remove_association( self, - request: Union[compute.PatchRuleNetworkFirewallPolicyRequest, dict] = None, + request: Union[ + compute.RemoveAssociationNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, firewall_policy: str = None, - firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Patches a rule of the specified priority. + ) -> extended_operation.ExtendedOperation: + r"""Removes an association for the specified firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.PatchRuleNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveAssociationNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.PatchRule. See the method - description for details. + NetworkFirewallPolicies.RemoveAssociation. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1448,11 +2310,6 @@ def patch_rule_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): - The body resource for this request - This corresponds to the ``firewall_policy_rule_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1460,30 +2317,15 @@ def patch_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, firewall_policy, firewall_policy_rule_resource] - ) + has_flattened_params = any([project, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1491,23 +2333,23 @@ def patch_rule_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchRuleNetworkFirewallPolicyRequest. + # in a compute.RemoveAssociationNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchRuleNetworkFirewallPolicyRequest): - request = compute.PatchRuleNetworkFirewallPolicyRequest(request) + if not isinstance( + request, compute.RemoveAssociationNetworkFirewallPolicyRequest + ): + request = compute.RemoveAssociationNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_rule_resource is not None: - request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch_rule] + rpc = self._transport._wrapped_methods[self._transport.remove_association] # Send the request. response = rpc( @@ -1517,14 +2359,36 @@ def patch_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def remove_association_unary( + def remove_rule_unary( self, - request: Union[ - compute.RemoveAssociationNetworkFirewallPolicyRequest, dict - ] = None, + request: Union[compute.RemoveRuleNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, firewall_policy: str = None, @@ -1532,14 +2396,13 @@ def remove_association_unary( timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes an association for the specified firewall - policy. + r"""Deletes a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.RemoveAssociationNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveRuleNetworkFirewallPolicyRequest, dict]): The request object. A request message for - NetworkFirewallPolicies.RemoveAssociation. See the - method description for details. + NetworkFirewallPolicies.RemoveRule. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1559,22 +2422,9 @@ def remove_association_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1588,13 +2438,11 @@ def remove_association_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveAssociationNetworkFirewallPolicyRequest. + # in a compute.RemoveRuleNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.RemoveAssociationNetworkFirewallPolicyRequest - ): - request = compute.RemoveAssociationNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.RemoveRuleNetworkFirewallPolicyRequest): + request = compute.RemoveRuleNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1604,7 +2452,7 @@ def remove_association_unary( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_association] + rpc = self._transport._wrapped_methods[self._transport.remove_rule] # Send the request. response = rpc( @@ -1617,7 +2465,7 @@ def remove_association_unary( # Done; return the response. return response - def remove_rule_unary( + def remove_rule( self, request: Union[compute.RemoveRuleNetworkFirewallPolicyRequest, dict] = None, *, @@ -1626,7 +2474,7 @@ def remove_rule_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Deletes a rule of the specified priority. Args: @@ -1653,22 +2501,9 @@ def remove_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1706,6 +2541,30 @@ def remove_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/network_firewall_policies/transports/base.py b/google/cloud/compute_v1/services/network_firewall_policies/transports/base.py index 9d3df658e..c7ba0809c 100644 --- a/google/cloud/compute_v1/services/network_firewall_policies/transports/base.py +++ b/google/cloud/compute_v1/services/network_firewall_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -363,5 +366,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("NetworkFirewallPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/network_firewall_policies/transports/rest.py b/google/cloud/compute_v1/services/network_firewall_policies/transports/rest.py index 90b9e38c2..b7d5f1f8f 100644 --- a/google/cloud/compute_v1/services/network_firewall_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/network_firewall_policies/transports/rest.py @@ -2612,6 +2612,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/networks/client.py b/google/cloud/compute_v1/services/networks/client.py index ed388e8a3..8bfce7f9a 100644 --- a/google/cloud/compute_v1/services/networks/client.py +++ b/google/cloud/compute_v1/services/networks/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.networks import pagers from google.cloud.compute_v1.types import compute from .transports.base import NetworksTransport, DEFAULT_CLIENT_INFO @@ -442,22 +445,9 @@ def add_peering_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -504,6 +494,121 @@ def add_peering_unary( # Done; return the response. return response + def add_peering( + self, + request: Union[compute.AddPeeringNetworkRequest, dict] = None, + *, + project: str = None, + network: str = None, + networks_add_peering_request_resource: compute.NetworksAddPeeringRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds a peering to the specified network. + + Args: + request (Union[google.cloud.compute_v1.types.AddPeeringNetworkRequest, dict]): + The request object. A request message for + Networks.AddPeering. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Name of the network resource to add + peering to. + + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + networks_add_peering_request_resource (google.cloud.compute_v1.types.NetworksAddPeeringRequest): + The body resource for this request + This corresponds to the ``networks_add_peering_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, network, networks_add_peering_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddPeeringNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddPeeringNetworkRequest): + request = compute.AddPeeringNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network is not None: + request.network = network + if networks_add_peering_request_resource is not None: + request.networks_add_peering_request_resource = ( + networks_add_peering_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_peering] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def delete_unary( self, request: Union[compute.DeleteNetworkRequest, dict] = None, @@ -537,22 +642,85 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, network]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNetworkRequest): + request = compute.DeleteNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network is not None: + request.network = network + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteNetworkRequest, dict] = None, + *, + project: str = None, + network: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified network. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNetworkRequest, dict]): + The request object. A request message for + Networks.Delete. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Name of the network to delete. + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -590,6 +758,30 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -782,22 +974,86 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, network_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertNetworkRequest): + request = compute.InsertNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network_resource is not None: + request.network_resource = network_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertNetworkRequest, dict] = None, + *, + project: str = None, + network_resource: compute.Network = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a network in the specified project using the + data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNetworkRequest, dict]): + The request object. A request message for + Networks.Insert. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_resource (google.cloud.compute_v1.types.Network): + The body resource for this request + This corresponds to the ``network_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -835,6 +1091,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1047,22 +1327,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1105,21 +1372,131 @@ def patch_unary( # Done; return the response. return response - def remove_peering_unary( + def patch( self, - request: Union[compute.RemovePeeringNetworkRequest, dict] = None, + request: Union[compute.PatchNetworkRequest, dict] = None, *, project: str = None, network: str = None, - networks_remove_peering_request_resource: compute.NetworksRemovePeeringRequest = None, + network_resource: compute.Network = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Removes a peering from the specified network. + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified network with the data included + in the request. Only the following fields can be + modified: routingConfig.routingMode. Args: - request (Union[google.cloud.compute_v1.types.RemovePeeringNetworkRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchNetworkRequest, dict]): + The request object. A request message for + Networks.Patch. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Name of the network to update. + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_resource (google.cloud.compute_v1.types.Network): + The body resource for this request + This corresponds to the ``network_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, network, network_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchNetworkRequest): + request = compute.PatchNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network is not None: + request.network = network + if network_resource is not None: + request.network_resource = network_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def remove_peering_unary( + self, + request: Union[compute.RemovePeeringNetworkRequest, dict] = None, + *, + project: str = None, + network: str = None, + networks_remove_peering_request_resource: compute.NetworksRemovePeeringRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Removes a peering from the specified network. + + Args: + request (Union[google.cloud.compute_v1.types.RemovePeeringNetworkRequest, dict]): The request object. A request message for Networks.RemovePeering. See the method description for details. @@ -1147,22 +1524,9 @@ def remove_peering_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1209,6 +1573,121 @@ def remove_peering_unary( # Done; return the response. return response + def remove_peering( + self, + request: Union[compute.RemovePeeringNetworkRequest, dict] = None, + *, + project: str = None, + network: str = None, + networks_remove_peering_request_resource: compute.NetworksRemovePeeringRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Removes a peering from the specified network. + + Args: + request (Union[google.cloud.compute_v1.types.RemovePeeringNetworkRequest, dict]): + The request object. A request message for + Networks.RemovePeering. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Name of the network resource to + remove peering from. + + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + networks_remove_peering_request_resource (google.cloud.compute_v1.types.NetworksRemovePeeringRequest): + The body resource for this request + This corresponds to the ``networks_remove_peering_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, network, networks_remove_peering_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RemovePeeringNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.RemovePeeringNetworkRequest): + request = compute.RemovePeeringNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network is not None: + request.network = network + if networks_remove_peering_request_resource is not None: + request.networks_remove_peering_request_resource = ( + networks_remove_peering_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.remove_peering] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def switch_to_custom_mode_unary( self, request: Union[compute.SwitchToCustomModeNetworkRequest, dict] = None, @@ -1244,22 +1723,87 @@ def switch_to_custom_mode_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, network]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SwitchToCustomModeNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SwitchToCustomModeNetworkRequest): + request = compute.SwitchToCustomModeNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network is not None: + request.network = network + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.switch_to_custom_mode] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def switch_to_custom_mode( + self, + request: Union[compute.SwitchToCustomModeNetworkRequest, dict] = None, + *, + project: str = None, + network: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Switches the network mode from auto subnet mode to + custom subnet mode. + + Args: + request (Union[google.cloud.compute_v1.types.SwitchToCustomModeNetworkRequest, dict]): + The request object. A request message for + Networks.SwitchToCustomMode. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Name of the network to be updated. + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1297,6 +1841,30 @@ def switch_to_custom_mode_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1345,22 +1913,103 @@ def update_peering_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, network, networks_update_peering_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdatePeeringNetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdatePeeringNetworkRequest): + request = compute.UpdatePeeringNetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if network is not None: + request.network = network + if networks_update_peering_request_resource is not None: + request.networks_update_peering_request_resource = ( + networks_update_peering_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_peering] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_peering( + self, + request: Union[compute.UpdatePeeringNetworkRequest, dict] = None, + *, + project: str = None, + network: str = None, + networks_update_peering_request_resource: compute.NetworksUpdatePeeringRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified network peering with the data included in + the request. You can only modify the + NetworkPeering.export_custom_routes field and the + NetworkPeering.import_custom_routes field. + + Args: + request (Union[google.cloud.compute_v1.types.UpdatePeeringNetworkRequest, dict]): + The request object. A request message for + Networks.UpdatePeering. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Name of the network resource which + the updated peering is belonging to. + + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + networks_update_peering_request_resource (google.cloud.compute_v1.types.NetworksUpdatePeeringRequest): + The body resource for this request + This corresponds to the ``networks_update_peering_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1404,6 +2053,30 @@ def update_peering_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/networks/transports/base.py b/google/cloud/compute_v1/services/networks/transports/base.py index 9152fa6f2..72ca901f5 100644 --- a/google/cloud/compute_v1/services/networks/transports/base.py +++ b/google/cloud/compute_v1/services/networks/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -293,5 +296,21 @@ def update_peering( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("NetworksTransport",) diff --git a/google/cloud/compute_v1/services/networks/transports/rest.py b/google/cloud/compute_v1/services/networks/transports/rest.py index d61e82cf9..85da7adef 100644 --- a/google/cloud/compute_v1/services/networks/transports/rest.py +++ b/google/cloud/compute_v1/services/networks/transports/rest.py @@ -1744,6 +1744,10 @@ def update_peering( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/node_groups/client.py b/google/cloud/compute_v1/services/node_groups/client.py index 41aa068bd..634cefce6 100644 --- a/google/cloud/compute_v1/services/node_groups/client.py +++ b/google/cloud/compute_v1/services/node_groups/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.node_groups import pagers from google.cloud.compute_v1.types import compute from .transports.base import NodeGroupsTransport, DEFAULT_CLIENT_INFO @@ -448,22 +451,9 @@ def add_nodes_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -512,6 +502,130 @@ def add_nodes_unary( # Done; return the response. return response + def add_nodes( + self, + request: Union[compute.AddNodesNodeGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + node_group: str = None, + node_groups_add_nodes_request_resource: compute.NodeGroupsAddNodesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds specified number of nodes to the node group. + + Args: + request (Union[google.cloud.compute_v1.types.AddNodesNodeGroupRequest, dict]): + The request object. A request message for + NodeGroups.AddNodes. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group (str): + Name of the NodeGroup resource. + This corresponds to the ``node_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_groups_add_nodes_request_resource (google.cloud.compute_v1.types.NodeGroupsAddNodesRequest): + The body resource for this request + This corresponds to the ``node_groups_add_nodes_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, node_group, node_groups_add_nodes_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddNodesNodeGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddNodesNodeGroupRequest): + request = compute.AddNodesNodeGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if node_group is not None: + request.node_group = node_group + if node_groups_add_nodes_request_resource is not None: + request.node_groups_add_nodes_request_resource = ( + node_groups_add_nodes_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_nodes] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def aggregated_list( self, request: Union[compute.AggregatedListNodeGroupsRequest, dict] = None, @@ -637,22 +751,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -695,6 +796,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteNodeGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + node_group: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified NodeGroup resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNodeGroupRequest, dict]): + The request object. A request message for + NodeGroups.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group (str): + Name of the NodeGroup resource to + delete. + + This corresponds to the ``node_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, node_group]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNodeGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNodeGroupRequest): + request = compute.DeleteNodeGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if node_group is not None: + request.node_group = node_group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def delete_nodes_unary( self, request: Union[compute.DeleteNodesNodeGroupRequest, dict] = None, @@ -745,22 +960,110 @@ def delete_nodes_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, node_group, node_groups_delete_nodes_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNodesNodeGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNodesNodeGroupRequest): + request = compute.DeleteNodesNodeGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if node_group is not None: + request.node_group = node_group + if node_groups_delete_nodes_request_resource is not None: + request.node_groups_delete_nodes_request_resource = ( + node_groups_delete_nodes_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_nodes] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete_nodes( + self, + request: Union[compute.DeleteNodesNodeGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + node_group: str = None, + node_groups_delete_nodes_request_resource: compute.NodeGroupsDeleteNodesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes specified nodes from the node group. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNodesNodeGroupRequest, dict]): + The request object. A request message for + NodeGroups.DeleteNodes. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group (str): + Name of the NodeGroup resource whose + nodes will be deleted. + + This corresponds to the ``node_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_groups_delete_nodes_request_resource (google.cloud.compute_v1.types.NodeGroupsDeleteNodesRequest): + The body resource for this request + This corresponds to the ``node_groups_delete_nodes_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -806,6 +1109,31 @@ def delete_nodes_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -998,7 +1326,105 @@ def get_iam_policy( # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, zone, resource]) + has_flattened_params = any([project, zone, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetIamPolicyNodeGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyNodeGroupRequest): + request = compute.GetIamPolicyNodeGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertNodeGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + initial_node_count: int = None, + node_group_resource: compute.NodeGroup = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a NodeGroup resource in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNodeGroupRequest, dict]): + The request object. A request message for + NodeGroups.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + initial_node_count (int): + Initial count of nodes in the node + group. + + This corresponds to the ``initial_node_count`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group_resource (google.cloud.compute_v1.types.NodeGroup): + The body resource for this request + This corresponds to the ``node_group_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, initial_node_count, node_group_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1006,23 +1432,25 @@ def get_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetIamPolicyNodeGroupRequest. + # in a compute.InsertNodeGroupRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetIamPolicyNodeGroupRequest): - request = compute.GetIamPolicyNodeGroupRequest(request) + if not isinstance(request, compute.InsertNodeGroupRequest): + request = compute.InsertNodeGroupRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if zone is not None: request.zone = zone - if resource is not None: - request.resource = resource + if initial_node_count is not None: + request.initial_node_count = initial_node_count + if node_group_resource is not None: + request.node_group_resource = node_group_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + rpc = self._transport._wrapped_methods[self._transport.insert] # Send the request. response = rpc( @@ -1035,7 +1463,7 @@ def get_iam_policy( # Done; return the response. return response - def insert_unary( + def insert( self, request: Union[compute.InsertNodeGroupRequest, dict] = None, *, @@ -1046,7 +1474,7 @@ def insert_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Creates a NodeGroup resource in the specified project using the data included in the request. @@ -1086,22 +1514,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1145,6 +1560,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1388,22 +1828,106 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, node_group, node_group_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchNodeGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchNodeGroupRequest): + request = compute.PatchNodeGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if node_group is not None: + request.node_group = node_group + if node_group_resource is not None: + request.node_group_resource = node_group_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchNodeGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + node_group: str = None, + node_group_resource: compute.NodeGroup = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified node group. + + Args: + request (Union[google.cloud.compute_v1.types.PatchNodeGroupRequest, dict]): + The request object. A request message for + NodeGroups.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group (str): + Name of the NodeGroup resource to + update. + + This corresponds to the ``node_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group_resource (google.cloud.compute_v1.types.NodeGroup): + The body resource for this request + This corresponds to the ``node_group_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1445,6 +1969,31 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1638,22 +2187,110 @@ def set_node_template_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, node_group, node_groups_set_node_template_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetNodeTemplateNodeGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetNodeTemplateNodeGroupRequest): + request = compute.SetNodeTemplateNodeGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if node_group is not None: + request.node_group = node_group + if node_groups_set_node_template_request_resource is not None: + request.node_groups_set_node_template_request_resource = ( + node_groups_set_node_template_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_node_template] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_node_template( + self, + request: Union[compute.SetNodeTemplateNodeGroupRequest, dict] = None, + *, + project: str = None, + zone: str = None, + node_group: str = None, + node_groups_set_node_template_request_resource: compute.NodeGroupsSetNodeTemplateRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the node template of the node group. + + Args: + request (Union[google.cloud.compute_v1.types.SetNodeTemplateNodeGroupRequest, dict]): + The request object. A request message for + NodeGroups.SetNodeTemplate. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + The name of the zone for this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_group (str): + Name of the NodeGroup resource to + update. + + This corresponds to the ``node_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_groups_set_node_template_request_resource (google.cloud.compute_v1.types.NodeGroupsSetNodeTemplateRequest): + The body resource for this request + This corresponds to the ``node_groups_set_node_template_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1699,6 +2336,31 @@ def set_node_template_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/node_groups/transports/base.py b/google/cloud/compute_v1/services/node_groups/transports/base.py index 98d77f281..b8a1ff4c8 100644 --- a/google/cloud/compute_v1/services/node_groups/transports/base.py +++ b/google/cloud/compute_v1/services/node_groups/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -320,5 +323,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("NodeGroupsTransport",) diff --git a/google/cloud/compute_v1/services/node_groups/transports/rest.py b/google/cloud/compute_v1/services/node_groups/transports/rest.py index 95cf8b654..10d698347 100644 --- a/google/cloud/compute_v1/services/node_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/node_groups/transports/rest.py @@ -2102,6 +2102,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/node_templates/client.py b/google/cloud/compute_v1/services/node_templates/client.py index b7e577eb3..290ef3d2b 100644 --- a/google/cloud/compute_v1/services/node_templates/client.py +++ b/google/cloud/compute_v1/services/node_templates/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.node_templates import pagers from google.cloud.compute_v1.types import compute from .transports.base import NodeTemplatesTransport, DEFAULT_CLIENT_INFO @@ -523,22 +526,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -581,6 +571,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteNodeTemplateRequest, dict] = None, + *, + project: str = None, + region: str = None, + node_template: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified NodeTemplate resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteNodeTemplateRequest, dict]): + The request object. A request message for + NodeTemplates.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region for this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_template (str): + Name of the NodeTemplate resource to + delete. + + This corresponds to the ``node_template`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, node_template]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteNodeTemplateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteNodeTemplateRequest): + request = compute.DeleteNodeTemplateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if node_template is not None: + request.node_template = node_template + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetNodeTemplateRequest, dict] = None, @@ -843,22 +947,97 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, node_template_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertNodeTemplateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertNodeTemplateRequest): + request = compute.InsertNodeTemplateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if node_template_resource is not None: + request.node_template_resource = node_template_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertNodeTemplateRequest, dict] = None, + *, + project: str = None, + region: str = None, + node_template_resource: compute.NodeTemplate = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a NodeTemplate resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertNodeTemplateRequest, dict]): + The request object. A request message for + NodeTemplates.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region for this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + node_template_resource (google.cloud.compute_v1.types.NodeTemplate): + The body resource for this request + This corresponds to the ``node_template_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -898,6 +1077,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/node_templates/transports/base.py b/google/cloud/compute_v1/services/node_templates/transports/base.py index 02c522cc4..833fabfb5 100644 --- a/google/cloud/compute_v1/services/node_templates/transports/base.py +++ b/google/cloud/compute_v1/services/node_templates/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -251,5 +254,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("NodeTemplatesTransport",) diff --git a/google/cloud/compute_v1/services/node_templates/transports/rest.py b/google/cloud/compute_v1/services/node_templates/transports/rest.py index 3a8aa200e..86fc11f4b 100644 --- a/google/cloud/compute_v1/services/node_templates/transports/rest.py +++ b/google/cloud/compute_v1/services/node_templates/transports/rest.py @@ -1369,6 +1369,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/node_types/client.py b/google/cloud/compute_v1/services/node_types/client.py index 36641bfbd..be03cba98 100644 --- a/google/cloud/compute_v1/services/node_types/client.py +++ b/google/cloud/compute_v1/services/node_types/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/node_types/transports/base.py b/google/cloud/compute_v1/services/node_types/transports/base.py index d95811133..d4e73610c 100644 --- a/google/cloud/compute_v1/services/node_types/transports/base.py +++ b/google/cloud/compute_v1/services/node_types/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -179,5 +180,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("NodeTypesTransport",) diff --git a/google/cloud/compute_v1/services/node_types/transports/rest.py b/google/cloud/compute_v1/services/node_types/transports/rest.py index a647e3b1d..744fba81c 100644 --- a/google/cloud/compute_v1/services/node_types/transports/rest.py +++ b/google/cloud/compute_v1/services/node_types/transports/rest.py @@ -560,6 +560,10 @@ def list(self) -> Callable[[compute.ListNodeTypesRequest], compute.NodeTypeList] # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/packet_mirrorings/client.py b/google/cloud/compute_v1/services/packet_mirrorings/client.py index 250e5c327..5999ec165 100644 --- a/google/cloud/compute_v1/services/packet_mirrorings/client.py +++ b/google/cloud/compute_v1/services/packet_mirrorings/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.packet_mirrorings import pagers from google.cloud.compute_v1.types import compute from .transports.base import PacketMirroringsTransport, DEFAULT_CLIENT_INFO @@ -524,22 +527,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -582,6 +572,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeletePacketMirroringRequest, dict] = None, + *, + project: str = None, + region: str = None, + packet_mirroring: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified PacketMirroring resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeletePacketMirroringRequest, dict]): + The request object. A request message for + PacketMirrorings.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + packet_mirroring (str): + Name of the PacketMirroring resource + to delete. + + This corresponds to the ``packet_mirroring`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, packet_mirroring]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeletePacketMirroringRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeletePacketMirroringRequest): + request = compute.DeletePacketMirroringRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if packet_mirroring is not None: + request.packet_mirroring = packet_mirroring + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetPacketMirroringRequest, dict] = None, @@ -719,22 +821,96 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, packet_mirroring_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertPacketMirroringRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertPacketMirroringRequest): + request = compute.InsertPacketMirroringRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if packet_mirroring_resource is not None: + request.packet_mirroring_resource = packet_mirroring_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertPacketMirroringRequest, dict] = None, + *, + project: str = None, + region: str = None, + packet_mirroring_resource: compute.PacketMirroring = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a PacketMirroring resource in the specified + project and region using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertPacketMirroringRequest, dict]): + The request object. A request message for + PacketMirrorings.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + packet_mirroring_resource (google.cloud.compute_v1.types.PacketMirroring): + The body resource for this request + This corresponds to the ``packet_mirroring_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -774,6 +950,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -918,22 +1119,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -980,6 +1168,131 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchPacketMirroringRequest, dict] = None, + *, + project: str = None, + region: str = None, + packet_mirroring: str = None, + packet_mirroring_resource: compute.PacketMirroring = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified PacketMirroring resource with + the data included in the request. This method supports + PATCH semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPacketMirroringRequest, dict]): + The request object. A request message for + PacketMirrorings.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + packet_mirroring (str): + Name of the PacketMirroring resource + to patch. + + This corresponds to the ``packet_mirroring`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + packet_mirroring_resource (google.cloud.compute_v1.types.PacketMirroring): + The body resource for this request + This corresponds to the ``packet_mirroring_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, packet_mirroring, packet_mirroring_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPacketMirroringRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchPacketMirroringRequest): + request = compute.PatchPacketMirroringRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if packet_mirroring is not None: + request.packet_mirroring = packet_mirroring + if packet_mirroring_resource is not None: + request.packet_mirroring_resource = packet_mirroring_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def test_iam_permissions( self, request: Union[compute.TestIamPermissionsPacketMirroringRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/packet_mirrorings/transports/base.py b/google/cloud/compute_v1/services/packet_mirrorings/transports/base.py index 9c46c4b0c..9d3773396 100644 --- a/google/cloud/compute_v1/services/packet_mirrorings/transports/base.py +++ b/google/cloud/compute_v1/services/packet_mirrorings/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -237,5 +240,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("PacketMirroringsTransport",) diff --git a/google/cloud/compute_v1/services/packet_mirrorings/transports/rest.py b/google/cloud/compute_v1/services/packet_mirrorings/transports/rest.py index f599b1776..0ecf5cf60 100644 --- a/google/cloud/compute_v1/services/packet_mirrorings/transports/rest.py +++ b/google/cloud/compute_v1/services/packet_mirrorings/transports/rest.py @@ -1190,6 +1190,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/projects/client.py b/google/cloud/compute_v1/services/projects/client.py index 5b56c412c..4b7d31ab1 100644 --- a/google/cloud/compute_v1/services/projects/client.py +++ b/google/cloud/compute_v1/services/projects/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.projects import pagers from google.cloud.compute_v1.types import compute from .transports.base import ProjectsTransport, DEFAULT_CLIENT_INFO @@ -428,22 +431,9 @@ def disable_xpn_host_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -482,6 +472,99 @@ def disable_xpn_host_unary( # Done; return the response. return response + def disable_xpn_host( + self, + request: Union[compute.DisableXpnHostProjectRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Disable this project as a shared VPC host project. + + Args: + request (Union[google.cloud.compute_v1.types.DisableXpnHostProjectRequest, dict]): + The request object. A request message for + Projects.DisableXpnHost. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DisableXpnHostProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DisableXpnHostProjectRequest): + request = compute.DisableXpnHostProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.disable_xpn_host] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def disable_xpn_resource_unary( self, request: Union[compute.DisableXpnResourceProjectRequest, dict] = None, @@ -517,22 +600,9 @@ def disable_xpn_resource_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -577,27 +647,34 @@ def disable_xpn_resource_unary( # Done; return the response. return response - def enable_xpn_host_unary( + def disable_xpn_resource( self, - request: Union[compute.EnableXpnHostProjectRequest, dict] = None, + request: Union[compute.DisableXpnResourceProjectRequest, dict] = None, *, project: str = None, + projects_disable_xpn_resource_request_resource: compute.ProjectsDisableXpnResourceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Enable this project as a shared VPC host project. + ) -> extended_operation.ExtendedOperation: + r"""Disable a service resource (also known as service + project) associated with this host project. Args: - request (Union[google.cloud.compute_v1.types.EnableXpnHostProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.DisableXpnResourceProjectRequest, dict]): The request object. A request message for - Projects.EnableXpnHost. See the method description for - details. + Projects.DisableXpnResource. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + projects_disable_xpn_resource_request_resource (google.cloud.compute_v1.types.ProjectsDisableXpnResourceRequest): + The body resource for this request + This corresponds to the ``projects_disable_xpn_resource_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -605,28 +682,17 @@ def enable_xpn_host_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project]) + has_flattened_params = any( + [project, projects_disable_xpn_resource_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -634,19 +700,23 @@ def enable_xpn_host_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.EnableXpnHostProjectRequest. + # in a compute.DisableXpnResourceProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.EnableXpnHostProjectRequest): - request = compute.EnableXpnHostProjectRequest(request) + if not isinstance(request, compute.DisableXpnResourceProjectRequest): + request = compute.DisableXpnResourceProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if projects_disable_xpn_resource_request_resource is not None: + request.projects_disable_xpn_resource_request_resource = ( + projects_disable_xpn_resource_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.enable_xpn_host] + rpc = self._transport._wrapped_methods[self._transport.disable_xpn_resource] # Send the request. response = rpc( @@ -656,38 +726,54 @@ def enable_xpn_host_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def enable_xpn_resource_unary( + def enable_xpn_host_unary( self, - request: Union[compute.EnableXpnResourceProjectRequest, dict] = None, + request: Union[compute.EnableXpnHostProjectRequest, dict] = None, *, project: str = None, - projects_enable_xpn_resource_request_resource: compute.ProjectsEnableXpnResourceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Enable service resource (a.k.a service project) for a - host project, so that subnets in the host project can be - used by instances in the service project. + r"""Enable this project as a shared VPC host project. Args: - request (Union[google.cloud.compute_v1.types.EnableXpnResourceProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.EnableXpnHostProjectRequest, dict]): The request object. A request message for - Projects.EnableXpnResource. See the method description - for details. + Projects.EnableXpnHost. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - projects_enable_xpn_resource_request_resource (google.cloud.compute_v1.types.ProjectsEnableXpnResourceRequest): - The body resource for this request - This corresponds to the ``projects_enable_xpn_resource_request_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -695,30 +781,15 @@ def enable_xpn_resource_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, projects_enable_xpn_resource_request_resource] - ) + has_flattened_params = any([project]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -726,23 +797,19 @@ def enable_xpn_resource_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.EnableXpnResourceProjectRequest. + # in a compute.EnableXpnHostProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.EnableXpnResourceProjectRequest): - request = compute.EnableXpnResourceProjectRequest(request) + if not isinstance(request, compute.EnableXpnHostProjectRequest): + request = compute.EnableXpnHostProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if projects_enable_xpn_resource_request_resource is not None: - request.projects_enable_xpn_resource_request_resource = ( - projects_enable_xpn_resource_request_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.enable_xpn_resource] + rpc = self._transport._wrapped_methods[self._transport.enable_xpn_host] # Send the request. response = rpc( @@ -755,29 +822,22 @@ def enable_xpn_resource_unary( # Done; return the response. return response - def get( + def enable_xpn_host( self, - request: Union[compute.GetProjectRequest, dict] = None, + request: Union[compute.EnableXpnHostProjectRequest, dict] = None, *, project: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Project: - r"""Returns the specified Project resource. To decrease latency for - this method, you can optionally omit any unneeded information - from the response by using a field mask. This practice is - especially recommended for unused quota information (the - ``quotas`` field). To exclude one or more fields, set your - request's ``fields`` query parameter to only include the fields - you need. For example, to only include the ``id`` and - ``selfLink`` fields, add the query parameter - ``?fields=id,selfLink`` to your request. + ) -> extended_operation.ExtendedOperation: + r"""Enable this project as a shared VPC host project. Args: - request (Union[google.cloud.compute_v1.types.GetProjectRequest, dict]): - The request object. A request message for Projects.Get. - See the method description for details. + request (Union[google.cloud.compute_v1.types.EnableXpnHostProjectRequest, dict]): + The request object. A request message for + Projects.EnableXpnHost. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -790,12 +850,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Project: - Represents a Project resource. A - project is used to organize resources in - a Google Cloud Platform environment. For - more information, read about the - Resource Hierarchy. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -809,11 +866,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetProjectRequest. + # in a compute.EnableXpnHostProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetProjectRequest): - request = compute.GetProjectRequest(request) + if not isinstance(request, compute.EnableXpnHostProjectRequest): + request = compute.EnableXpnHostProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -821,7 +878,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.enable_xpn_host] # Send the request. response = rpc( @@ -831,31 +888,62 @@ def get( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_xpn_host( + def enable_xpn_resource_unary( self, - request: Union[compute.GetXpnHostProjectRequest, dict] = None, + request: Union[compute.EnableXpnResourceProjectRequest, dict] = None, *, project: str = None, + projects_enable_xpn_resource_request_resource: compute.ProjectsEnableXpnResourceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Project: - r"""Gets the shared VPC host project that this project - links to. May be empty if no link exists. + ) -> compute.Operation: + r"""Enable service resource (a.k.a service project) for a + host project, so that subnets in the host project can be + used by instances in the service project. Args: - request (Union[google.cloud.compute_v1.types.GetXpnHostProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.EnableXpnResourceProjectRequest, dict]): The request object. A request message for - Projects.GetXpnHost. See the method description for - details. + Projects.EnableXpnResource. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + projects_enable_xpn_resource_request_resource (google.cloud.compute_v1.types.ProjectsEnableXpnResourceRequest): + The body resource for this request + This corresponds to the ``projects_enable_xpn_resource_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -863,18 +951,17 @@ def get_xpn_host( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Project: - Represents a Project resource. A - project is used to organize resources in - a Google Cloud Platform environment. For - more information, read about the - Resource Hierarchy. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project]) + has_flattened_params = any( + [project, projects_enable_xpn_resource_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -882,19 +969,23 @@ def get_xpn_host( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetXpnHostProjectRequest. + # in a compute.EnableXpnResourceProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetXpnHostProjectRequest): - request = compute.GetXpnHostProjectRequest(request) + if not isinstance(request, compute.EnableXpnResourceProjectRequest): + request = compute.EnableXpnResourceProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if projects_enable_xpn_resource_request_resource is not None: + request.projects_enable_xpn_resource_request_resource = ( + projects_enable_xpn_resource_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_xpn_host] + rpc = self._transport._wrapped_methods[self._transport.enable_xpn_resource] # Send the request. response = rpc( @@ -907,28 +998,725 @@ def get_xpn_host( # Done; return the response. return response - def get_xpn_resources( + def enable_xpn_resource( self, - request: Union[compute.GetXpnResourcesProjectsRequest, dict] = None, + request: Union[compute.EnableXpnResourceProjectRequest, dict] = None, *, project: str = None, + projects_enable_xpn_resource_request_resource: compute.ProjectsEnableXpnResourceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GetXpnResourcesPager: - r"""Gets service resources (a.k.a service project) - associated with this host project. + ) -> extended_operation.ExtendedOperation: + r"""Enable service resource (a.k.a service project) for a + host project, so that subnets in the host project can be + used by instances in the service project. Args: - request (Union[google.cloud.compute_v1.types.GetXpnResourcesProjectsRequest, dict]): + request (Union[google.cloud.compute_v1.types.EnableXpnResourceProjectRequest, dict]): The request object. A request message for - Projects.GetXpnResources. See the method description for - details. + Projects.EnableXpnResource. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + projects_enable_xpn_resource_request_resource (google.cloud.compute_v1.types.ProjectsEnableXpnResourceRequest): + The body resource for this request + This corresponds to the ``projects_enable_xpn_resource_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, projects_enable_xpn_resource_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.EnableXpnResourceProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.EnableXpnResourceProjectRequest): + request = compute.EnableXpnResourceProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if projects_enable_xpn_resource_request_resource is not None: + request.projects_enable_xpn_resource_request_resource = ( + projects_enable_xpn_resource_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.enable_xpn_resource] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetProjectRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Project: + r"""Returns the specified Project resource. To decrease latency for + this method, you can optionally omit any unneeded information + from the response by using a field mask. This practice is + especially recommended for unused quota information (the + ``quotas`` field). To exclude one or more fields, set your + request's ``fields`` query parameter to only include the fields + you need. For example, to only include the ``id`` and + ``selfLink`` fields, add the query parameter + ``?fields=id,selfLink`` to your request. + + Args: + request (Union[google.cloud.compute_v1.types.GetProjectRequest, dict]): + The request object. A request message for Projects.Get. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Project: + Represents a Project resource. A + project is used to organize resources in + a Google Cloud Platform environment. For + more information, read about the + Resource Hierarchy. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetProjectRequest): + request = compute.GetProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_xpn_host( + self, + request: Union[compute.GetXpnHostProjectRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Project: + r"""Gets the shared VPC host project that this project + links to. May be empty if no link exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetXpnHostProjectRequest, dict]): + The request object. A request message for + Projects.GetXpnHost. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Project: + Represents a Project resource. A + project is used to organize resources in + a Google Cloud Platform environment. For + more information, read about the + Resource Hierarchy. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetXpnHostProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetXpnHostProjectRequest): + request = compute.GetXpnHostProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_xpn_host] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_xpn_resources( + self, + request: Union[compute.GetXpnResourcesProjectsRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GetXpnResourcesPager: + r"""Gets service resources (a.k.a service project) + associated with this host project. + + Args: + request (Union[google.cloud.compute_v1.types.GetXpnResourcesProjectsRequest, dict]): + The request object. A request message for + Projects.GetXpnResources. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.projects.pagers.GetXpnResourcesPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetXpnResourcesProjectsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetXpnResourcesProjectsRequest): + request = compute.GetXpnResourcesProjectsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_xpn_resources] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GetXpnResourcesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_xpn_hosts( + self, + request: Union[compute.ListXpnHostsProjectsRequest, dict] = None, + *, + project: str = None, + projects_list_xpn_hosts_request_resource: compute.ProjectsListXpnHostsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListXpnHostsPager: + r"""Lists all shared VPC host projects visible to the + user in an organization. + + Args: + request (Union[google.cloud.compute_v1.types.ListXpnHostsProjectsRequest, dict]): + The request object. A request message for + Projects.ListXpnHosts. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + projects_list_xpn_hosts_request_resource (google.cloud.compute_v1.types.ProjectsListXpnHostsRequest): + The body resource for this request + This corresponds to the ``projects_list_xpn_hosts_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.projects.pagers.ListXpnHostsPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, projects_list_xpn_hosts_request_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListXpnHostsProjectsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListXpnHostsProjectsRequest): + request = compute.ListXpnHostsProjectsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if projects_list_xpn_hosts_request_resource is not None: + request.projects_list_xpn_hosts_request_resource = ( + projects_list_xpn_hosts_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_xpn_hosts] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListXpnHostsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def move_disk_unary( + self, + request: Union[compute.MoveDiskProjectRequest, dict] = None, + *, + project: str = None, + disk_move_request_resource: compute.DiskMoveRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Moves a persistent disk from one zone to another. + + Args: + request (Union[google.cloud.compute_v1.types.MoveDiskProjectRequest, dict]): + The request object. A request message for + Projects.MoveDisk. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk_move_request_resource (google.cloud.compute_v1.types.DiskMoveRequest): + The body resource for this request + This corresponds to the ``disk_move_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, disk_move_request_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.MoveDiskProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.MoveDiskProjectRequest): + request = compute.MoveDiskProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if disk_move_request_resource is not None: + request.disk_move_request_resource = disk_move_request_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.move_disk] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def move_disk( + self, + request: Union[compute.MoveDiskProjectRequest, dict] = None, + *, + project: str = None, + disk_move_request_resource: compute.DiskMoveRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Moves a persistent disk from one zone to another. + + Args: + request (Union[google.cloud.compute_v1.types.MoveDiskProjectRequest, dict]): + The request object. A request message for + Projects.MoveDisk. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk_move_request_resource (google.cloud.compute_v1.types.DiskMoveRequest): + The body resource for this request + This corresponds to the ``disk_move_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, disk_move_request_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.MoveDiskProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.MoveDiskProjectRequest): + request = compute.MoveDiskProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if disk_move_request_resource is not None: + request.disk_move_request_resource = disk_move_request_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.move_disk] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def move_instance_unary( + self, + request: Union[compute.MoveInstanceProjectRequest, dict] = None, + *, + project: str = None, + instance_move_request_resource: compute.InstanceMoveRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Moves an instance and its attached persistent disks from one + zone to another. *Note*: Moving VMs or disks by using this + method might cause unexpected behavior. For more information, + see the `known + issue `__. + + Args: + request (Union[google.cloud.compute_v1.types.MoveInstanceProjectRequest, dict]): + The request object. A request message for + Projects.MoveInstance. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_move_request_resource (google.cloud.compute_v1.types.InstanceMoveRequest): + The body resource for this request + This corresponds to the ``instance_move_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, instance_move_request_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.MoveInstanceProjectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.MoveInstanceProjectRequest): + request = compute.MoveInstanceProjectRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if instance_move_request_resource is not None: + request.instance_move_request_resource = instance_move_request_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.move_instance] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def move_instance( + self, + request: Union[compute.MoveInstanceProjectRequest, dict] = None, + *, + project: str = None, + instance_move_request_resource: compute.InstanceMoveRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Moves an instance and its attached persistent disks from one + zone to another. *Note*: Moving VMs or disks by using this + method might cause unexpected behavior. For more information, + see the `known + issue `__. + + Args: + request (Union[google.cloud.compute_v1.types.MoveInstanceProjectRequest, dict]): + The request object. A request message for + Projects.MoveInstance. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_move_request_resource (google.cloud.compute_v1.types.InstanceMoveRequest): + The body resource for this request + This corresponds to the ``instance_move_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -936,16 +1724,15 @@ def get_xpn_resources( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.projects.pagers.GetXpnResourcesPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project]) + has_flattened_params = any([project, instance_move_request_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -953,19 +1740,21 @@ def get_xpn_resources( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetXpnResourcesProjectsRequest. + # in a compute.MoveInstanceProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetXpnResourcesProjectsRequest): - request = compute.GetXpnResourcesProjectsRequest(request) + if not isinstance(request, compute.MoveInstanceProjectRequest): + request = compute.MoveInstanceProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project + if instance_move_request_resource is not None: + request.instance_move_request_resource = instance_move_request_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_xpn_resources] + rpc = self._transport._wrapped_methods[self._transport.move_instance] # Send the request. response = rpc( @@ -975,44 +1764,60 @@ def get_xpn_resources( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GetXpnResourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def list_xpn_hosts( + def set_common_instance_metadata_unary( self, - request: Union[compute.ListXpnHostsProjectsRequest, dict] = None, + request: Union[compute.SetCommonInstanceMetadataProjectRequest, dict] = None, *, project: str = None, - projects_list_xpn_hosts_request_resource: compute.ProjectsListXpnHostsRequest = None, + metadata_resource: compute.Metadata = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListXpnHostsPager: - r"""Lists all shared VPC host projects visible to the - user in an organization. + ) -> compute.Operation: + r"""Sets metadata common to all instances within the + specified project using the data included in the + request. Args: - request (Union[google.cloud.compute_v1.types.ListXpnHostsProjectsRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetCommonInstanceMetadataProjectRequest, dict]): The request object. A request message for - Projects.ListXpnHosts. See the method description for - details. + Projects.SetCommonInstanceMetadata. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - projects_list_xpn_hosts_request_resource (google.cloud.compute_v1.types.ProjectsListXpnHostsRequest): + metadata_resource (google.cloud.compute_v1.types.Metadata): The body resource for this request - This corresponds to the ``projects_list_xpn_hosts_request_resource`` field + This corresponds to the ``metadata_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1022,16 +1827,15 @@ def list_xpn_hosts( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.projects.pagers.ListXpnHostsPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, projects_list_xpn_hosts_request_resource]) + has_flattened_params = any([project, metadata_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1039,23 +1843,23 @@ def list_xpn_hosts( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListXpnHostsProjectsRequest. + # in a compute.SetCommonInstanceMetadataProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListXpnHostsProjectsRequest): - request = compute.ListXpnHostsProjectsRequest(request) + if not isinstance(request, compute.SetCommonInstanceMetadataProjectRequest): + request = compute.SetCommonInstanceMetadataProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if projects_list_xpn_hosts_request_resource is not None: - request.projects_list_xpn_hosts_request_resource = ( - projects_list_xpn_hosts_request_resource - ) + if metadata_resource is not None: + request.metadata_resource = metadata_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_xpn_hosts] + rpc = self._transport._wrapped_methods[ + self._transport.set_common_instance_metadata + ] # Send the request. response = rpc( @@ -1065,43 +1869,36 @@ def list_xpn_hosts( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListXpnHostsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def move_disk_unary( + def set_common_instance_metadata( self, - request: Union[compute.MoveDiskProjectRequest, dict] = None, + request: Union[compute.SetCommonInstanceMetadataProjectRequest, dict] = None, *, project: str = None, - disk_move_request_resource: compute.DiskMoveRequest = None, + metadata_resource: compute.Metadata = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Moves a persistent disk from one zone to another. + ) -> extended_operation.ExtendedOperation: + r"""Sets metadata common to all instances within the + specified project using the data included in the + request. Args: - request (Union[google.cloud.compute_v1.types.MoveDiskProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetCommonInstanceMetadataProjectRequest, dict]): The request object. A request message for - Projects.MoveDisk. See the method description for - details. + Projects.SetCommonInstanceMetadata. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - disk_move_request_resource (google.cloud.compute_v1.types.DiskMoveRequest): + metadata_resource (google.cloud.compute_v1.types.Metadata): The body resource for this request - This corresponds to the ``disk_move_request_resource`` field + This corresponds to the ``metadata_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1111,28 +1908,15 @@ def move_disk_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, disk_move_request_resource]) + has_flattened_params = any([project, metadata_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1140,21 +1924,23 @@ def move_disk_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.MoveDiskProjectRequest. + # in a compute.SetCommonInstanceMetadataProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.MoveDiskProjectRequest): - request = compute.MoveDiskProjectRequest(request) + if not isinstance(request, compute.SetCommonInstanceMetadataProjectRequest): + request = compute.SetCommonInstanceMetadataProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if disk_move_request_resource is not None: - request.disk_move_request_resource = disk_move_request_resource + if metadata_resource is not None: + request.metadata_resource = metadata_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.move_disk] + rpc = self._transport._wrapped_methods[ + self._transport.set_common_instance_metadata + ] # Send the request. response = rpc( @@ -1164,38 +1950,61 @@ def move_disk_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def move_instance_unary( + def set_default_network_tier_unary( self, - request: Union[compute.MoveInstanceProjectRequest, dict] = None, + request: Union[compute.SetDefaultNetworkTierProjectRequest, dict] = None, *, project: str = None, - instance_move_request_resource: compute.InstanceMoveRequest = None, + projects_set_default_network_tier_request_resource: compute.ProjectsSetDefaultNetworkTierRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Moves an instance and its attached persistent disks from one - zone to another. *Note*: Moving VMs or disks by using this - method might cause unexpected behavior. For more information, - see the `known - issue `__. + r"""Sets the default network tier of the project. The + default network tier is used when an + address/forwardingRule/instance is created without + specifying the network tier field. Args: - request (Union[google.cloud.compute_v1.types.MoveInstanceProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetDefaultNetworkTierProjectRequest, dict]): The request object. A request message for - Projects.MoveInstance. See the method description for - details. + Projects.SetDefaultNetworkTier. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_move_request_resource (google.cloud.compute_v1.types.InstanceMoveRequest): + projects_set_default_network_tier_request_resource (google.cloud.compute_v1.types.ProjectsSetDefaultNetworkTierRequest): The body resource for this request - This corresponds to the ``instance_move_request_resource`` field + This corresponds to the ``projects_set_default_network_tier_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1205,28 +2014,17 @@ def move_instance_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, instance_move_request_resource]) + has_flattened_params = any( + [project, projects_set_default_network_tier_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1234,21 +2032,23 @@ def move_instance_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.MoveInstanceProjectRequest. + # in a compute.SetDefaultNetworkTierProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.MoveInstanceProjectRequest): - request = compute.MoveInstanceProjectRequest(request) + if not isinstance(request, compute.SetDefaultNetworkTierProjectRequest): + request = compute.SetDefaultNetworkTierProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if instance_move_request_resource is not None: - request.instance_move_request_resource = instance_move_request_resource + if projects_set_default_network_tier_request_resource is not None: + request.projects_set_default_network_tier_request_resource = ( + projects_set_default_network_tier_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.move_instance] + rpc = self._transport._wrapped_methods[self._transport.set_default_network_tier] # Send the request. response = rpc( @@ -1261,33 +2061,34 @@ def move_instance_unary( # Done; return the response. return response - def set_common_instance_metadata_unary( + def set_default_network_tier( self, - request: Union[compute.SetCommonInstanceMetadataProjectRequest, dict] = None, + request: Union[compute.SetDefaultNetworkTierProjectRequest, dict] = None, *, project: str = None, - metadata_resource: compute.Metadata = None, + projects_set_default_network_tier_request_resource: compute.ProjectsSetDefaultNetworkTierRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets metadata common to all instances within the - specified project using the data included in the - request. + ) -> extended_operation.ExtendedOperation: + r"""Sets the default network tier of the project. The + default network tier is used when an + address/forwardingRule/instance is created without + specifying the network tier field. Args: - request (Union[google.cloud.compute_v1.types.SetCommonInstanceMetadataProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetDefaultNetworkTierProjectRequest, dict]): The request object. A request message for - Projects.SetCommonInstanceMetadata. See the method + Projects.SetDefaultNetworkTier. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - metadata_resource (google.cloud.compute_v1.types.Metadata): + projects_set_default_network_tier_request_resource (google.cloud.compute_v1.types.ProjectsSetDefaultNetworkTierRequest): The body resource for this request - This corresponds to the ``metadata_resource`` field + This corresponds to the ``projects_set_default_network_tier_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1297,28 +2098,17 @@ def set_common_instance_metadata_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, metadata_resource]) + has_flattened_params = any( + [project, projects_set_default_network_tier_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1326,23 +2116,23 @@ def set_common_instance_metadata_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetCommonInstanceMetadataProjectRequest. + # in a compute.SetDefaultNetworkTierProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetCommonInstanceMetadataProjectRequest): - request = compute.SetCommonInstanceMetadataProjectRequest(request) + if not isinstance(request, compute.SetDefaultNetworkTierProjectRequest): + request = compute.SetDefaultNetworkTierProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if metadata_resource is not None: - request.metadata_resource = metadata_resource + if projects_set_default_network_tier_request_resource is not None: + request.projects_set_default_network_tier_request_resource = ( + projects_set_default_network_tier_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.set_common_instance_metadata - ] + rpc = self._transport._wrapped_methods[self._transport.set_default_network_tier] # Send the request. response = rpc( @@ -1352,37 +2142,61 @@ def set_common_instance_metadata_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_default_network_tier_unary( + def set_usage_export_bucket_unary( self, - request: Union[compute.SetDefaultNetworkTierProjectRequest, dict] = None, + request: Union[compute.SetUsageExportBucketProjectRequest, dict] = None, *, project: str = None, - projects_set_default_network_tier_request_resource: compute.ProjectsSetDefaultNetworkTierRequest = None, + usage_export_location_resource: compute.UsageExportLocation = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Sets the default network tier of the project. The - default network tier is used when an - address/forwardingRule/instance is created without - specifying the network tier field. + r"""Enables the usage export feature and sets the usage + export bucket where reports are stored. If you provide + an empty request body using this method, the usage + export feature will be disabled. Args: - request (Union[google.cloud.compute_v1.types.SetDefaultNetworkTierProjectRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetUsageExportBucketProjectRequest, dict]): The request object. A request message for - Projects.SetDefaultNetworkTier. See the method + Projects.SetUsageExportBucket. See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - projects_set_default_network_tier_request_resource (google.cloud.compute_v1.types.ProjectsSetDefaultNetworkTierRequest): + usage_export_location_resource (google.cloud.compute_v1.types.UsageExportLocation): The body resource for this request - This corresponds to the ``projects_set_default_network_tier_request_resource`` field + This corresponds to the ``usage_export_location_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1392,30 +2206,15 @@ def set_default_network_tier_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, projects_set_default_network_tier_request_resource] - ) + has_flattened_params = any([project, usage_export_location_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1423,23 +2222,21 @@ def set_default_network_tier_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetDefaultNetworkTierProjectRequest. + # in a compute.SetUsageExportBucketProjectRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetDefaultNetworkTierProjectRequest): - request = compute.SetDefaultNetworkTierProjectRequest(request) + if not isinstance(request, compute.SetUsageExportBucketProjectRequest): + request = compute.SetUsageExportBucketProjectRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project - if projects_set_default_network_tier_request_resource is not None: - request.projects_set_default_network_tier_request_resource = ( - projects_set_default_network_tier_request_resource - ) + if usage_export_location_resource is not None: + request.usage_export_location_resource = usage_export_location_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_default_network_tier] + rpc = self._transport._wrapped_methods[self._transport.set_usage_export_bucket] # Send the request. response = rpc( @@ -1452,7 +2249,7 @@ def set_default_network_tier_unary( # Done; return the response. return response - def set_usage_export_bucket_unary( + def set_usage_export_bucket( self, request: Union[compute.SetUsageExportBucketProjectRequest, dict] = None, *, @@ -1461,7 +2258,7 @@ def set_usage_export_bucket_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Enables the usage export feature and sets the usage export bucket where reports are stored. If you provide an empty request body using this method, the usage @@ -1489,22 +2286,9 @@ def set_usage_export_bucket_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1542,6 +2326,30 @@ def set_usage_export_bucket_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/projects/transports/base.py b/google/cloud/compute_v1/services/projects/transports/base.py index 280b57a1c..aa85530a8 100644 --- a/google/cloud/compute_v1/services/projects/transports/base.py +++ b/google/cloud/compute_v1/services/projects/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -317,5 +320,21 @@ def set_usage_export_bucket( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ProjectsTransport",) diff --git a/google/cloud/compute_v1/services/projects/transports/rest.py b/google/cloud/compute_v1/services/projects/transports/rest.py index 811711bf6..6ec9ad804 100644 --- a/google/cloud/compute_v1/services/projects/transports/rest.py +++ b/google/cloud/compute_v1/services/projects/transports/rest.py @@ -2111,6 +2111,10 @@ def set_usage_export_bucket( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/public_advertised_prefixes/client.py b/google/cloud/compute_v1/services/public_advertised_prefixes/client.py index 39e3d31cd..a08760fa1 100644 --- a/google/cloud/compute_v1/services/public_advertised_prefixes/client.py +++ b/google/cloud/compute_v1/services/public_advertised_prefixes/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.public_advertised_prefixes import pagers from google.cloud.compute_v1.types import compute from .transports.base import PublicAdvertisedPrefixesTransport, DEFAULT_CLIENT_INFO @@ -438,22 +441,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -494,6 +484,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeletePublicAdvertisedPrefixeRequest, dict] = None, + *, + project: str = None, + public_advertised_prefix: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified PublicAdvertisedPrefix + + Args: + request (Union[google.cloud.compute_v1.types.DeletePublicAdvertisedPrefixeRequest, dict]): + The request object. A request message for + PublicAdvertisedPrefixes.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_advertised_prefix (str): + Name of the PublicAdvertisedPrefix + resource to delete. + + This corresponds to the ``public_advertised_prefix`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, public_advertised_prefix]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeletePublicAdvertisedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeletePublicAdvertisedPrefixeRequest): + request = compute.DeletePublicAdvertisedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if public_advertised_prefix is not None: + request.public_advertised_prefix = public_advertised_prefix + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetPublicAdvertisedPrefixeRequest, dict] = None, @@ -614,22 +707,90 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, public_advertised_prefix_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertPublicAdvertisedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertPublicAdvertisedPrefixeRequest): + request = compute.InsertPublicAdvertisedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if public_advertised_prefix_resource is not None: + request.public_advertised_prefix_resource = ( + public_advertised_prefix_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertPublicAdvertisedPrefixeRequest, dict] = None, + *, + project: str = None, + public_advertised_prefix_resource: compute.PublicAdvertisedPrefix = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a PublicAdvertisedPrefix in the specified + project using the parameters that are included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertPublicAdvertisedPrefixeRequest, dict]): + The request object. A request message for + PublicAdvertisedPrefixes.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_advertised_prefix_resource (google.cloud.compute_v1.types.PublicAdvertisedPrefix): + The body resource for this request + This corresponds to the ``public_advertised_prefix_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -669,6 +830,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -796,22 +981,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -858,6 +1030,124 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchPublicAdvertisedPrefixeRequest, dict] = None, + *, + project: str = None, + public_advertised_prefix: str = None, + public_advertised_prefix_resource: compute.PublicAdvertisedPrefix = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified Router resource with the data + included in the request. This method supports PATCH + semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPublicAdvertisedPrefixeRequest, dict]): + The request object. A request message for + PublicAdvertisedPrefixes.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_advertised_prefix (str): + Name of the PublicAdvertisedPrefix + resource to patch. + + This corresponds to the ``public_advertised_prefix`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_advertised_prefix_resource (google.cloud.compute_v1.types.PublicAdvertisedPrefix): + The body resource for this request + This corresponds to the ``public_advertised_prefix_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, public_advertised_prefix, public_advertised_prefix_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPublicAdvertisedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchPublicAdvertisedPrefixeRequest): + request = compute.PatchPublicAdvertisedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if public_advertised_prefix is not None: + request.public_advertised_prefix = public_advertised_prefix + if public_advertised_prefix_resource is not None: + request.public_advertised_prefix_resource = ( + public_advertised_prefix_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/public_advertised_prefixes/transports/base.py b/google/cloud/compute_v1/services/public_advertised_prefixes/transports/base.py index 7303b4b56..24482c35c 100644 --- a/google/cloud/compute_v1/services/public_advertised_prefixes/transports/base.py +++ b/google/cloud/compute_v1/services/public_advertised_prefixes/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -209,5 +212,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("PublicAdvertisedPrefixesTransport",) diff --git a/google/cloud/compute_v1/services/public_advertised_prefixes/transports/rest.py b/google/cloud/compute_v1/services/public_advertised_prefixes/transports/rest.py index b1134e758..4b35154f7 100644 --- a/google/cloud/compute_v1/services/public_advertised_prefixes/transports/rest.py +++ b/google/cloud/compute_v1/services/public_advertised_prefixes/transports/rest.py @@ -909,6 +909,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/public_delegated_prefixes/client.py b/google/cloud/compute_v1/services/public_delegated_prefixes/client.py index 031f492ce..120d246b2 100644 --- a/google/cloud/compute_v1/services/public_delegated_prefixes/client.py +++ b/google/cloud/compute_v1/services/public_delegated_prefixes/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.public_delegated_prefixes import pagers from google.cloud.compute_v1.types import compute from .transports.base import PublicDelegatedPrefixesTransport, DEFAULT_CLIENT_INFO @@ -531,22 +534,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -589,6 +579,119 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeletePublicDelegatedPrefixeRequest, dict] = None, + *, + project: str = None, + region: str = None, + public_delegated_prefix: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified PublicDelegatedPrefix in the + given region. + + Args: + request (Union[google.cloud.compute_v1.types.DeletePublicDelegatedPrefixeRequest, dict]): + The request object. A request message for + PublicDelegatedPrefixes.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region of this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix (str): + Name of the PublicDelegatedPrefix + resource to delete. + + This corresponds to the ``public_delegated_prefix`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, public_delegated_prefix]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeletePublicDelegatedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeletePublicDelegatedPrefixeRequest): + request = compute.DeletePublicDelegatedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if public_delegated_prefix is not None: + request.public_delegated_prefix = public_delegated_prefix + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetPublicDelegatedPrefixeRequest, dict] = None, @@ -726,22 +829,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -786,6 +876,120 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertPublicDelegatedPrefixeRequest, dict] = None, + *, + project: str = None, + region: str = None, + public_delegated_prefix_resource: compute.PublicDelegatedPrefix = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a PublicDelegatedPrefix in the specified + project in the given region using the parameters that + are included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertPublicDelegatedPrefixeRequest, dict]): + The request object. A request message for + PublicDelegatedPrefixes.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region of this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix_resource (google.cloud.compute_v1.types.PublicDelegatedPrefix): + The body resource for this request + This corresponds to the ``public_delegated_prefix_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, public_delegated_prefix_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertPublicDelegatedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertPublicDelegatedPrefixeRequest): + request = compute.InsertPublicDelegatedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if public_delegated_prefix_resource is not None: + request.public_delegated_prefix_resource = ( + public_delegated_prefix_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListPublicDelegatedPrefixesRequest, dict] = None, @@ -925,22 +1129,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -989,6 +1180,133 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchPublicDelegatedPrefixeRequest, dict] = None, + *, + project: str = None, + region: str = None, + public_delegated_prefix: str = None, + public_delegated_prefix_resource: compute.PublicDelegatedPrefix = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified PublicDelegatedPrefix resource + with the data included in the request. This method + supports PATCH semantics and uses JSON merge patch + format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPublicDelegatedPrefixeRequest, dict]): + The request object. A request message for + PublicDelegatedPrefixes.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix (str): + Name of the PublicDelegatedPrefix + resource to patch. + + This corresponds to the ``public_delegated_prefix`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + public_delegated_prefix_resource (google.cloud.compute_v1.types.PublicDelegatedPrefix): + The body resource for this request + This corresponds to the ``public_delegated_prefix_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, public_delegated_prefix, public_delegated_prefix_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPublicDelegatedPrefixeRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchPublicDelegatedPrefixeRequest): + request = compute.PatchPublicDelegatedPrefixeRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if public_delegated_prefix is not None: + request.public_delegated_prefix = public_delegated_prefix + if public_delegated_prefix_resource is not None: + request.public_delegated_prefix_resource = ( + public_delegated_prefix_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/public_delegated_prefixes/transports/base.py b/google/cloud/compute_v1/services/public_delegated_prefixes/transports/base.py index 8d7db3699..367c4215d 100644 --- a/google/cloud/compute_v1/services/public_delegated_prefixes/transports/base.py +++ b/google/cloud/compute_v1/services/public_delegated_prefixes/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -224,5 +227,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("PublicDelegatedPrefixesTransport",) diff --git a/google/cloud/compute_v1/services/public_delegated_prefixes/transports/rest.py b/google/cloud/compute_v1/services/public_delegated_prefixes/transports/rest.py index 21d842752..bcfba90e3 100644 --- a/google/cloud/compute_v1/services/public_delegated_prefixes/transports/rest.py +++ b/google/cloud/compute_v1/services/public_delegated_prefixes/transports/rest.py @@ -1047,6 +1047,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_autoscalers/client.py b/google/cloud/compute_v1/services/region_autoscalers/client.py index eef4699ce..ed2378fa6 100644 --- a/google/cloud/compute_v1/services/region_autoscalers/client.py +++ b/google/cloud/compute_v1/services/region_autoscalers/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_autoscalers import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionAutoscalersTransport, DEFAULT_CLIENT_INFO @@ -444,22 +447,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -502,6 +492,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionAutoscalerRequest, dict] = None, + *, + project: str = None, + region: str = None, + autoscaler: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified autoscaler. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionAutoscalerRequest, dict]): + The request object. A request message for + RegionAutoscalers.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler (str): + Name of the autoscaler to delete. + This corresponds to the ``autoscaler`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, autoscaler]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionAutoscalerRequest): + request = compute.DeleteRegionAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if autoscaler is not None: + request.autoscaler = autoscaler + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionAutoscalerRequest, dict] = None, @@ -641,22 +743,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -699,6 +788,119 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionAutoscalerRequest, dict] = None, + *, + project: str = None, + region: str = None, + autoscaler_resource: compute.Autoscaler = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates an autoscaler in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionAutoscalerRequest, dict]): + The request object. A request message for + RegionAutoscalers.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler_resource (google.cloud.compute_v1.types.Autoscaler): + The body resource for this request + This corresponds to the ``autoscaler_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, autoscaler_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionAutoscalerRequest): + request = compute.InsertRegionAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if autoscaler_resource is not None: + request.autoscaler_resource = autoscaler_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionAutoscalersRequest, dict] = None, @@ -835,22 +1037,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -893,6 +1082,121 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchRegionAutoscalerRequest, dict] = None, + *, + project: str = None, + region: str = None, + autoscaler_resource: compute.Autoscaler = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates an autoscaler in the specified project using + the data included in the request. This method supports + PATCH semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionAutoscalerRequest, dict]): + The request object. A request message for + RegionAutoscalers.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler_resource (google.cloud.compute_v1.types.Autoscaler): + The body resource for this request + This corresponds to the ``autoscaler_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, autoscaler_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionAutoscalerRequest): + request = compute.PatchRegionAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if autoscaler_resource is not None: + request.autoscaler_resource = autoscaler_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateRegionAutoscalerRequest, dict] = None, @@ -936,22 +1240,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -994,6 +1285,119 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateRegionAutoscalerRequest, dict] = None, + *, + project: str = None, + region: str = None, + autoscaler_resource: compute.Autoscaler = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates an autoscaler in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateRegionAutoscalerRequest, dict]): + The request object. A request message for + RegionAutoscalers.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + autoscaler_resource (google.cloud.compute_v1.types.Autoscaler): + The body resource for this request + This corresponds to the ``autoscaler_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, autoscaler_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateRegionAutoscalerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateRegionAutoscalerRequest): + request = compute.UpdateRegionAutoscalerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if autoscaler_resource is not None: + request.autoscaler_resource = autoscaler_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_autoscalers/transports/base.py b/google/cloud/compute_v1/services/region_autoscalers/transports/base.py index fbb6f0c70..37d0aafca 100644 --- a/google/cloud/compute_v1/services/region_autoscalers/transports/base.py +++ b/google/cloud/compute_v1/services/region_autoscalers/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -218,5 +221,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionAutoscalersTransport",) diff --git a/google/cloud/compute_v1/services/region_autoscalers/transports/rest.py b/google/cloud/compute_v1/services/region_autoscalers/transports/rest.py index ecfbdebc1..40da6928d 100644 --- a/google/cloud/compute_v1/services/region_autoscalers/transports/rest.py +++ b/google/cloud/compute_v1/services/region_autoscalers/transports/rest.py @@ -1052,6 +1052,10 @@ def update( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_backend_services/client.py b/google/cloud/compute_v1/services/region_backend_services/client.py index 351bdd98a..277971f90 100644 --- a/google/cloud/compute_v1/services/region_backend_services/client.py +++ b/google/cloud/compute_v1/services/region_backend_services/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_backend_services import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionBackendServicesTransport, DEFAULT_CLIENT_INFO @@ -447,22 +450,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -505,6 +495,121 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionBackendServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + backend_service: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified regional BackendService + resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionBackendServiceRequest, dict]): + The request object. A request message for + RegionBackendServices.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to delete. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, backend_service]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionBackendServiceRequest): + request = compute.DeleteRegionBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if backend_service is not None: + request.backend_service = backend_service + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionBackendServiceRequest, dict] = None, @@ -753,22 +858,99 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, backend_service_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionBackendServiceRequest): + request = compute.InsertRegionBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionBackendServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a regional BackendService resource in the + specified project using the data included in the + request. For more information, see Backend services + overview. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionBackendServiceRequest, dict]): + The request object. A request message for + RegionBackendServices.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -808,6 +990,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -958,22 +1165,112 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, backend_service, backend_service_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionBackendServiceRequest): + request = compute.PatchRegionBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if backend_service is not None: + request.backend_service = backend_service + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchRegionBackendServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + backend_service: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified regional BackendService + resource with the data included in the request. For more + information, see Understanding backend services This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionBackendServiceRequest, dict]): + The request object. A request message for + RegionBackendServices.Patch. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to patch. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1017,6 +1314,31 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1072,22 +1394,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1134,6 +1443,132 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateRegionBackendServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + backend_service: str = None, + backend_service_resource: compute.BackendService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified regional BackendService + resource with the data included in the request. For more + information, see Backend services overview . + + Args: + request (Union[google.cloud.compute_v1.types.UpdateRegionBackendServiceRequest, dict]): + The request object. A request message for + RegionBackendServices.Update. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service (str): + Name of the BackendService resource + to update. + + This corresponds to the ``backend_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + backend_service_resource (google.cloud.compute_v1.types.BackendService): + The body resource for this request + This corresponds to the ``backend_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, backend_service, backend_service_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateRegionBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateRegionBackendServiceRequest): + request = compute.UpdateRegionBackendServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if backend_service is not None: + request.backend_service = backend_service + if backend_service_resource is not None: + request.backend_service_resource = backend_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_backend_services/transports/base.py b/google/cloud/compute_v1/services/region_backend_services/transports/base.py index 3756f7197..71bb4d0ee 100644 --- a/google/cloud/compute_v1/services/region_backend_services/transports/base.py +++ b/google/cloud/compute_v1/services/region_backend_services/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -235,5 +238,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionBackendServicesTransport",) diff --git a/google/cloud/compute_v1/services/region_backend_services/transports/rest.py b/google/cloud/compute_v1/services/region_backend_services/transports/rest.py index df06d91b2..23ff5c7b3 100644 --- a/google/cloud/compute_v1/services/region_backend_services/transports/rest.py +++ b/google/cloud/compute_v1/services/region_backend_services/transports/rest.py @@ -1207,6 +1207,10 @@ def update( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_commitments/client.py b/google/cloud/compute_v1/services/region_commitments/client.py index 6d5f66f70..5ea20d679 100644 --- a/google/cloud/compute_v1/services/region_commitments/client.py +++ b/google/cloud/compute_v1/services/region_commitments/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_commitments import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionCommitmentsTransport, DEFAULT_CLIENT_INFO @@ -617,22 +620,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -675,6 +665,117 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionCommitmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + commitment_resource: compute.Commitment = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a commitment in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionCommitmentRequest, dict]): + The request object. A request message for + RegionCommitments.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + commitment_resource (google.cloud.compute_v1.types.Commitment): + The body resource for this request + This corresponds to the ``commitment_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, commitment_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionCommitmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionCommitmentRequest): + request = compute.InsertRegionCommitmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if commitment_resource is not None: + request.commitment_resource = commitment_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionCommitmentsRequest, dict] = None, @@ -816,22 +917,107 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, commitment, commitment_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateRegionCommitmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateRegionCommitmentRequest): + request = compute.UpdateRegionCommitmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if commitment is not None: + request.commitment = commitment + if commitment_resource is not None: + request.commitment_resource = commitment_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update( + self, + request: Union[compute.UpdateRegionCommitmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + commitment: str = None, + commitment_resource: compute.Commitment = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified commitment with the data included in the + request. Update is performed only on selected fields included as + part of update-mask. Only the following fields can be modified: + auto_renew. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateRegionCommitmentRequest, dict]): + The request object. A request message for + RegionCommitments.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + commitment (str): + Name of the commitment for which auto + renew is being updated. + + This corresponds to the ``commitment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + commitment_resource (google.cloud.compute_v1.types.Commitment): + The body resource for this request + This corresponds to the ``commitment_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -873,6 +1059,31 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_commitments/transports/base.py b/google/cloud/compute_v1/services/region_commitments/transports/base.py index 9de3ab268..8476ce024 100644 --- a/google/cloud/compute_v1/services/region_commitments/transports/base.py +++ b/google/cloud/compute_v1/services/region_commitments/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -207,5 +210,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionCommitmentsTransport",) diff --git a/google/cloud/compute_v1/services/region_commitments/transports/rest.py b/google/cloud/compute_v1/services/region_commitments/transports/rest.py index dabbaa3f9..c3b53fd51 100644 --- a/google/cloud/compute_v1/services/region_commitments/transports/rest.py +++ b/google/cloud/compute_v1/services/region_commitments/transports/rest.py @@ -889,6 +889,10 @@ def update( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_disk_types/client.py b/google/cloud/compute_v1/services/region_disk_types/client.py index 6e21c70e2..f9c353e58 100644 --- a/google/cloud/compute_v1/services/region_disk_types/client.py +++ b/google/cloud/compute_v1/services/region_disk_types/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/region_disk_types/transports/base.py b/google/cloud/compute_v1/services/region_disk_types/transports/base.py index b14adc21d..0339af72a 100644 --- a/google/cloud/compute_v1/services/region_disk_types/transports/base.py +++ b/google/cloud/compute_v1/services/region_disk_types/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -163,5 +164,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("RegionDiskTypesTransport",) diff --git a/google/cloud/compute_v1/services/region_disk_types/transports/rest.py b/google/cloud/compute_v1/services/region_disk_types/transports/rest.py index 1b11e20b1..864e96041 100644 --- a/google/cloud/compute_v1/services/region_disk_types/transports/rest.py +++ b/google/cloud/compute_v1/services/region_disk_types/transports/rest.py @@ -443,6 +443,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_disks/client.py b/google/cloud/compute_v1/services/region_disks/client.py index 9fddfbfac..2299dcf3e 100644 --- a/google/cloud/compute_v1/services/region_disks/client.py +++ b/google/cloud/compute_v1/services/region_disks/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_disks import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionDisksTransport, DEFAULT_CLIENT_INFO @@ -450,22 +453,9 @@ def add_resource_policies_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -514,49 +504,47 @@ def add_resource_policies_unary( # Done; return the response. return response - def create_snapshot_unary( + def add_resource_policies( self, - request: Union[compute.CreateSnapshotRegionDiskRequest, dict] = None, + request: Union[compute.AddResourcePoliciesRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, disk: str = None, - snapshot_resource: compute.Snapshot = None, + region_disks_add_resource_policies_request_resource: compute.RegionDisksAddResourcePoliciesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates a snapshot of a specified persistent disk. - For regular snapshot creation, consider using - snapshots.insert instead, as that method supports more - features, such as creating snapshots in a project - different from the source disk project. + ) -> extended_operation.ExtendedOperation: + r"""Adds existing resource policies to a regional disk. + You can only add one policy which will be applied to + this disk for scheduling snapshot creation. Args: - request (Union[google.cloud.compute_v1.types.CreateSnapshotRegionDiskRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddResourcePoliciesRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.CreateSnapshot. See the method description - for details. + RegionDisks.AddResourcePolicies. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region for this request. + The name of the region for this + request. + This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. disk (str): - Name of the regional persistent disk - to snapshot. - + The disk name for this request. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - snapshot_resource (google.cloud.compute_v1.types.Snapshot): + region_disks_add_resource_policies_request_resource (google.cloud.compute_v1.types.RegionDisksAddResourcePoliciesRequest): The body resource for this request - This corresponds to the ``snapshot_resource`` field + This corresponds to the ``region_disks_add_resource_policies_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -566,28 +554,17 @@ def create_snapshot_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, disk, snapshot_resource]) + has_flattened_params = any( + [project, region, disk, region_disks_add_resource_policies_request_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -595,11 +572,11 @@ def create_snapshot_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.CreateSnapshotRegionDiskRequest. + # in a compute.AddResourcePoliciesRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.CreateSnapshotRegionDiskRequest): - request = compute.CreateSnapshotRegionDiskRequest(request) + if not isinstance(request, compute.AddResourcePoliciesRegionDiskRequest): + request = compute.AddResourcePoliciesRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -608,12 +585,14 @@ def create_snapshot_unary( request.region = region if disk is not None: request.disk = disk - if snapshot_resource is not None: - request.snapshot_resource = snapshot_resource + if region_disks_add_resource_policies_request_resource is not None: + request.region_disks_add_resource_policies_request_resource = ( + region_disks_add_resource_policies_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_snapshot] + rpc = self._transport._wrapped_methods[self._transport.add_resource_policies] # Send the request. response = rpc( @@ -623,31 +602,57 @@ def create_snapshot_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def delete_unary( + def create_snapshot_unary( self, - request: Union[compute.DeleteRegionDiskRequest, dict] = None, + request: Union[compute.CreateSnapshotRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, disk: str = None, + snapshot_resource: compute.Snapshot = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Deletes the specified regional persistent disk. - Deleting a regional disk removes all the replicas of its - data permanently and is irreversible. However, deleting - a disk does not delete any snapshots previously made - from the disk. You must separately delete snapshots. + r"""Creates a snapshot of a specified persistent disk. + For regular snapshot creation, consider using + snapshots.insert instead, as that method supports more + features, such as creating snapshots in a project + different from the source disk project. Args: - request (Union[google.cloud.compute_v1.types.DeleteRegionDiskRequest, dict]): + request (Union[google.cloud.compute_v1.types.CreateSnapshotRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.Delete. See the method description for - details. + RegionDisks.CreateSnapshot. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -660,11 +665,16 @@ def delete_unary( should not be set. disk (str): Name of the regional persistent disk - to delete. + to snapshot. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + snapshot_resource (google.cloud.compute_v1.types.Snapshot): + The body resource for this request + This corresponds to the ``snapshot_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -672,28 +682,15 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, disk]) + has_flattened_params = any([project, region, disk, snapshot_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -701,11 +698,11 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteRegionDiskRequest. + # in a compute.CreateSnapshotRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteRegionDiskRequest): - request = compute.DeleteRegionDiskRequest(request) + if not isinstance(request, compute.CreateSnapshotRegionDiskRequest): + request = compute.CreateSnapshotRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -714,10 +711,12 @@ def delete_unary( request.region = region if disk is not None: request.disk = disk + if snapshot_resource is not None: + request.snapshot_resource = snapshot_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.create_snapshot] # Send the request. response = rpc( @@ -730,23 +729,29 @@ def delete_unary( # Done; return the response. return response - def get( + def create_snapshot( self, - request: Union[compute.GetRegionDiskRequest, dict] = None, + request: Union[compute.CreateSnapshotRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, disk: str = None, + snapshot_resource: compute.Snapshot = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Disk: - r"""Returns a specified regional persistent disk. + ) -> extended_operation.ExtendedOperation: + r"""Creates a snapshot of a specified persistent disk. + For regular snapshot creation, consider using + snapshots.insert instead, as that method supports more + features, such as creating snapshots in a project + different from the source disk project. Args: - request (Union[google.cloud.compute_v1.types.GetRegionDiskRequest, dict]): + request (Union[google.cloud.compute_v1.types.CreateSnapshotRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.Get. See the method description for details. + RegionDisks.CreateSnapshot. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -759,11 +764,16 @@ def get( should not be set. disk (str): Name of the regional persistent disk - to return. + to snapshot. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + snapshot_resource (google.cloud.compute_v1.types.Snapshot): + The body resource for this request + This corresponds to the ``snapshot_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -771,25 +781,15 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Disk: - Represents a Persistent Disk resource. Google Compute - Engine has two Disk resources: \* - [Zonal](/compute/docs/reference/rest/v1/disks) \* - [Regional](/compute/docs/reference/rest/v1/regionDisks) - Persistent disks are required for running your VM - instances. Create both boot and non-boot (data) - persistent disks. For more information, read Persistent - Disks. For more storage options, read Storage options. - The disks resource represents a zonal persistent disk. - For more information, read Zonal persistent disks. The - regionDisks resource represents a regional persistent - disk. For more information, read Regional resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, disk]) + has_flattened_params = any([project, region, disk, snapshot_resource]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -797,11 +797,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetRegionDiskRequest. + # in a compute.CreateSnapshotRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetRegionDiskRequest): - request = compute.GetRegionDiskRequest(request) + if not isinstance(request, compute.CreateSnapshotRegionDiskRequest): + request = compute.CreateSnapshotRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -810,10 +810,12 @@ def get( request.region = region if disk is not None: request.disk = disk + if snapshot_resource is not None: + request.snapshot_resource = snapshot_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.create_snapshot] # Send the request. response = rpc( @@ -823,27 +825,55 @@ def get( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_iam_policy( + def delete_unary( self, - request: Union[compute.GetIamPolicyRegionDiskRequest, dict] = None, + request: Union[compute.DeleteRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, - resource: str = None, + disk: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Gets the access control policy for a resource. May be - empty if no such policy or resource exists. + ) -> compute.Operation: + r"""Deletes the specified regional persistent disk. + Deleting a regional disk removes all the replicas of its + data permanently and is irreversible. However, deleting + a disk does not delete any snapshots previously made + from the disk. You must separately delete snapshots. Args: - request (Union[google.cloud.compute_v1.types.GetIamPolicyRegionDiskRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.GetIamPolicy. See the method description for + RegionDisks.Delete. See the method description for details. project (str): Project ID for this request. @@ -851,17 +881,15 @@ def get_iam_policy( on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - The name of the region for this - request. - + Name of the region for this request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this - request. + disk (str): + Name of the regional persistent disk + to delete. - This corresponds to the ``resource`` field + This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -871,53 +899,15 @@ def get_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, - see the [IAM - documentation](\ https://cloud.google.com/iam/docs/). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, resource]) + has_flattened_params = any([project, region, disk]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -925,23 +915,23 @@ def get_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetIamPolicyRegionDiskRequest. + # in a compute.DeleteRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetIamPolicyRegionDiskRequest): - request = compute.GetIamPolicyRegionDiskRequest(request) + if not isinstance(request, compute.DeleteRegionDiskRequest): + request = compute.DeleteRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if resource is not None: - request.resource = resource + if disk is not None: + request.disk = disk # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -954,24 +944,27 @@ def get_iam_policy( # Done; return the response. return response - def insert_unary( + def delete( self, - request: Union[compute.InsertRegionDiskRequest, dict] = None, + request: Union[compute.DeleteRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, - disk_resource: compute.Disk = None, + disk: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates a persistent regional disk in the specified - project using the data included in the request. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified regional persistent disk. + Deleting a regional disk removes all the replicas of its + data permanently and is irreversible. However, deleting + a disk does not delete any snapshots previously made + from the disk. You must separately delete snapshots. Args: - request (Union[google.cloud.compute_v1.types.InsertRegionDiskRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.Insert. See the method description for + RegionDisks.Delete. See the method description for details. project (str): Project ID for this request. @@ -979,13 +972,643 @@ def insert_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region for this request. + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk (str): + Name of the regional persistent disk + to delete. + + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, disk]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionDiskRequest): + request = compute.DeleteRegionDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if disk is not None: + request.disk = disk + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetRegionDiskRequest, dict] = None, + *, + project: str = None, + region: str = None, + disk: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Disk: + r"""Returns a specified regional persistent disk. + + Args: + request (Union[google.cloud.compute_v1.types.GetRegionDiskRequest, dict]): + The request object. A request message for + RegionDisks.Get. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk (str): + Name of the regional persistent disk + to return. + + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Disk: + Represents a Persistent Disk resource. Google Compute + Engine has two Disk resources: \* + [Zonal](/compute/docs/reference/rest/v1/disks) \* + [Regional](/compute/docs/reference/rest/v1/regionDisks) + Persistent disks are required for running your VM + instances. Create both boot and non-boot (data) + persistent disks. For more information, read Persistent + Disks. For more storage options, read Storage options. + The disks resource represents a zonal persistent disk. + For more information, read Zonal persistent disks. The + regionDisks resource represents a regional persistent + disk. For more information, read Regional resources. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, disk]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetRegionDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRegionDiskRequest): + request = compute.GetRegionDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if disk is not None: + request.disk = disk + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyRegionDiskRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Gets the access control policy for a resource. May be + empty if no such policy or resource exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetIamPolicyRegionDiskRequest, dict]): + The request object. A request message for + RegionDisks.GetIamPolicy. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region for this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, + see the [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetIamPolicyRegionDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyRegionDiskRequest): + request = compute.GetIamPolicyRegionDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertRegionDiskRequest, dict] = None, + *, + project: str = None, + region: str = None, + disk_resource: compute.Disk = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a persistent regional disk in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionDiskRequest, dict]): + The request object. A request message for + RegionDisks.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk_resource (google.cloud.compute_v1.types.Disk): + The body resource for this request + This corresponds to the ``disk_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, disk_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionDiskRequest): + request = compute.InsertRegionDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if disk_resource is not None: + request.disk_resource = disk_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionDiskRequest, dict] = None, + *, + project: str = None, + region: str = None, + disk_resource: compute.Disk = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a persistent regional disk in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionDiskRequest, dict]): + The request object. A request message for + RegionDisks.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + disk_resource (google.cloud.compute_v1.types.Disk): + The body resource for this request + This corresponds to the ``disk_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, disk_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionDiskRequest): + request = compute.InsertRegionDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if disk_resource is not None: + request.disk_resource = disk_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListRegionDisksRequest, dict] = None, + *, + project: str = None, + region: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves the list of persistent disks contained + within the specified region. + + Args: + request (Union[google.cloud.compute_v1.types.ListRegionDisksRequest, dict]): + The request object. A request message for + RegionDisks.List. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.region_disks.pagers.ListPager: + A list of Disk resources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListRegionDisksRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListRegionDisksRequest): + request = compute.ListRegionDisksRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def remove_resource_policies_unary( + self, + request: Union[compute.RemoveResourcePoliciesRegionDiskRequest, dict] = None, + *, + project: str = None, + region: str = None, + disk: str = None, + region_disks_remove_resource_policies_request_resource: compute.RegionDisksRemoveResourcePoliciesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Removes resource policies from a regional disk. + + Args: + request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesRegionDiskRequest, dict]): + The request object. A request message for + RegionDisks.RemoveResourcePolicies. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region for this + request. + This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - disk_resource (google.cloud.compute_v1.types.Disk): + disk (str): + The disk name for this request. + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_disks_remove_resource_policies_request_resource (google.cloud.compute_v1.types.RegionDisksRemoveResourcePoliciesRequest): The body resource for this request - This corresponds to the ``disk_resource`` field + This corresponds to the ``region_disks_remove_resource_policies_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -995,28 +1618,22 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, disk_resource]) + has_flattened_params = any( + [ + project, + region, + disk, + region_disks_remove_resource_policies_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1024,23 +1641,27 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertRegionDiskRequest. + # in a compute.RemoveResourcePoliciesRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertRegionDiskRequest): - request = compute.InsertRegionDiskRequest(request) + if not isinstance(request, compute.RemoveResourcePoliciesRegionDiskRequest): + request = compute.RemoveResourcePoliciesRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if disk_resource is not None: - request.disk_resource = disk_resource + if disk is not None: + request.disk = disk + if region_disks_remove_resource_policies_request_resource is not None: + request.region_disks_remove_resource_policies_request_resource = ( + region_disks_remove_resource_policies_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] # Send the request. response = rpc( @@ -1053,34 +1674,47 @@ def insert_unary( # Done; return the response. return response - def list( + def remove_resource_policies( self, - request: Union[compute.ListRegionDisksRequest, dict] = None, + request: Union[compute.RemoveResourcePoliciesRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, + disk: str = None, + region_disks_remove_resource_policies_request_resource: compute.RegionDisksRemoveResourcePoliciesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves the list of persistent disks contained - within the specified region. + ) -> extended_operation.ExtendedOperation: + r"""Removes resource policies from a regional disk. Args: - request (Union[google.cloud.compute_v1.types.ListRegionDisksRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.List. See the method description for - details. + RegionDisks.RemoveResourcePolicies. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region for this request. + The name of the region for this + request. + This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + disk (str): + The disk name for this request. + This corresponds to the ``disk`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_disks_remove_resource_policies_request_resource (google.cloud.compute_v1.types.RegionDisksRemoveResourcePoliciesRequest): + The body resource for this request + This corresponds to the ``region_disks_remove_resource_policies_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1088,17 +1722,22 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.region_disks.pagers.ListPager: - A list of Disk resources. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region]) + has_flattened_params = any( + [ + project, + region, + disk, + region_disks_remove_resource_policies_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1106,21 +1745,27 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListRegionDisksRequest. + # in a compute.RemoveResourcePoliciesRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListRegionDisksRequest): - request = compute.ListRegionDisksRequest(request) + if not isinstance(request, compute.RemoveResourcePoliciesRegionDiskRequest): + request = compute.RemoveResourcePoliciesRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region + if disk is not None: + request.disk = disk + if region_disks_remove_resource_policies_request_resource is not None: + request.region_disks_remove_resource_policies_request_resource = ( + region_disks_remove_resource_policies_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] # Send the request. response = rpc( @@ -1130,57 +1775,71 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def remove_resource_policies_unary( + def resize_unary( self, - request: Union[compute.RemoveResourcePoliciesRegionDiskRequest, dict] = None, + request: Union[compute.ResizeRegionDiskRequest, dict] = None, *, project: str = None, region: str = None, disk: str = None, - region_disks_remove_resource_policies_request_resource: compute.RegionDisksRemoveResourcePoliciesRequest = None, + region_disks_resize_request_resource: compute.RegionDisksResizeRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes resource policies from a regional disk. + r"""Resizes the specified regional persistent disk. Args: - request (Union[google.cloud.compute_v1.types.RemoveResourcePoliciesRegionDiskRequest, dict]): + request (Union[google.cloud.compute_v1.types.ResizeRegionDiskRequest, dict]): The request object. A request message for - RegionDisks.RemoveResourcePolicies. See the method - description for details. + RegionDisks.Resize. See the method description for + details. project (str): - Project ID for this request. + The project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - The name of the region for this - request. - + Name of the region for this request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. disk (str): - The disk name for this request. + Name of the regional persistent disk. This corresponds to the ``disk`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_disks_remove_resource_policies_request_resource (google.cloud.compute_v1.types.RegionDisksRemoveResourcePoliciesRequest): + region_disks_resize_request_resource (google.cloud.compute_v1.types.RegionDisksResizeRequest): The body resource for this request - This corresponds to the ``region_disks_remove_resource_policies_request_resource`` field + This corresponds to the ``region_disks_resize_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1190,34 +1849,16 @@ def remove_resource_policies_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [ - project, - region, - disk, - region_disks_remove_resource_policies_request_resource, - ] + [project, region, disk, region_disks_resize_request_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -1226,11 +1867,11 @@ def remove_resource_policies_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveResourcePoliciesRegionDiskRequest. + # in a compute.ResizeRegionDiskRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.RemoveResourcePoliciesRegionDiskRequest): - request = compute.RemoveResourcePoliciesRegionDiskRequest(request) + if not isinstance(request, compute.ResizeRegionDiskRequest): + request = compute.ResizeRegionDiskRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1239,14 +1880,14 @@ def remove_resource_policies_unary( request.region = region if disk is not None: request.disk = disk - if region_disks_remove_resource_policies_request_resource is not None: - request.region_disks_remove_resource_policies_request_resource = ( - region_disks_remove_resource_policies_request_resource + if region_disks_resize_request_resource is not None: + request.region_disks_resize_request_resource = ( + region_disks_resize_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_resource_policies] + rpc = self._transport._wrapped_methods[self._transport.resize] # Send the request. response = rpc( @@ -1259,7 +1900,7 @@ def remove_resource_policies_unary( # Done; return the response. return response - def resize_unary( + def resize( self, request: Union[compute.ResizeRegionDiskRequest, dict] = None, *, @@ -1270,7 +1911,7 @@ def resize_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Resizes the specified regional persistent disk. Args: @@ -1305,22 +1946,9 @@ def resize_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1366,6 +1994,31 @@ def resize_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1557,22 +2210,108 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, resource, region_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsRegionDiskRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsRegionDiskRequest): + request = compute.SetLabelsRegionDiskRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource is not None: + request.resource = resource + if region_set_labels_request_resource is not None: + request.region_set_labels_request_resource = ( + region_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_labels( + self, + request: Union[compute.SetLabelsRegionDiskRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource: str = None, + region_set_labels_request_resource: compute.RegionSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on the target regional disk. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsRegionDiskRequest, dict]): + The request object. A request message for + RegionDisks.SetLabels. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + This corresponds to the ``region_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1618,6 +2357,31 @@ def set_labels_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_disks/transports/base.py b/google/cloud/compute_v1/services/region_disks/transports/base.py index d605c49f1..144a4051c 100644 --- a/google/cloud/compute_v1/services/region_disks/transports/base.py +++ b/google/cloud/compute_v1/services/region_disks/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -303,5 +306,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionDisksTransport",) diff --git a/google/cloud/compute_v1/services/region_disks/transports/rest.py b/google/cloud/compute_v1/services/region_disks/transports/rest.py index e837c5a43..213b1e1bf 100644 --- a/google/cloud/compute_v1/services/region_disks/transports/rest.py +++ b/google/cloud/compute_v1/services/region_disks/transports/rest.py @@ -2006,6 +2006,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_health_check_services/client.py b/google/cloud/compute_v1/services/region_health_check_services/client.py index e95e5c052..6b78dc59e 100644 --- a/google/cloud/compute_v1/services/region_health_check_services/client.py +++ b/google/cloud/compute_v1/services/region_health_check_services/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_health_check_services import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionHealthCheckServicesTransport, DEFAULT_CLIENT_INFO @@ -447,22 +450,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -505,6 +495,121 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionHealthCheckServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check_service: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified regional HealthCheckService. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionHealthCheckServiceRequest, dict]): + The request object. A request message for + RegionHealthCheckServices.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_service (str): + Name of the HealthCheckService to + delete. The name must be 1-63 characters + long, and comply with RFC1035. + + This corresponds to the ``health_check_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, health_check_service]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionHealthCheckServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionHealthCheckServiceRequest): + request = compute.DeleteRegionHealthCheckServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check_service is not None: + request.health_check_service = health_check_service + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionHealthCheckServiceRequest, dict] = None, @@ -640,22 +745,98 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, health_check_service_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionHealthCheckServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionHealthCheckServiceRequest): + request = compute.InsertRegionHealthCheckServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check_service_resource is not None: + request.health_check_service_resource = health_check_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionHealthCheckServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check_service_resource: compute.HealthCheckService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a regional HealthCheckService resource in the + specified project and region using the data included in + the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionHealthCheckServiceRequest, dict]): + The request object. A request message for + RegionHealthCheckServices.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_service_resource (google.cloud.compute_v1.types.HealthCheckService): + The body resource for this request + This corresponds to the ``health_check_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -695,6 +876,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -843,22 +1049,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -905,6 +1098,134 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchRegionHealthCheckServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check_service: str = None, + health_check_service_resource: compute.HealthCheckService = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified regional HealthCheckService + resource with the data included in the request. This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionHealthCheckServiceRequest, dict]): + The request object. A request message for + RegionHealthCheckServices.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_service (str): + Name of the HealthCheckService to + update. The name must be 1-63 characters + long, and comply with RFC1035. + + This corresponds to the ``health_check_service`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_service_resource (google.cloud.compute_v1.types.HealthCheckService): + The body resource for this request + This corresponds to the ``health_check_service_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, health_check_service, health_check_service_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionHealthCheckServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionHealthCheckServiceRequest): + request = compute.PatchRegionHealthCheckServiceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check_service is not None: + request.health_check_service = health_check_service + if health_check_service_resource is not None: + request.health_check_service_resource = health_check_service_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_health_check_services/transports/base.py b/google/cloud/compute_v1/services/region_health_check_services/transports/base.py index b8b9164f9..a28844ccd 100644 --- a/google/cloud/compute_v1/services/region_health_check_services/transports/base.py +++ b/google/cloud/compute_v1/services/region_health_check_services/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -206,5 +209,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionHealthCheckServicesTransport",) diff --git a/google/cloud/compute_v1/services/region_health_check_services/transports/rest.py b/google/cloud/compute_v1/services/region_health_check_services/transports/rest.py index 318579743..74caab092 100644 --- a/google/cloud/compute_v1/services/region_health_check_services/transports/rest.py +++ b/google/cloud/compute_v1/services/region_health_check_services/transports/rest.py @@ -908,6 +908,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_health_checks/client.py b/google/cloud/compute_v1/services/region_health_checks/client.py index b28b09d15..129a23c0b 100644 --- a/google/cloud/compute_v1/services/region_health_checks/client.py +++ b/google/cloud/compute_v1/services/region_health_checks/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_health_checks import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionHealthChecksTransport, DEFAULT_CLIENT_INFO @@ -446,22 +449,98 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, health_check]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionHealthCheckRequest): + request = compute.DeleteRegionHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check is not None: + request.health_check = health_check + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteRegionHealthCheckRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified HealthCheck resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionHealthCheckRequest, dict]): + The request object. A request message for + RegionHealthChecks.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check (str): + Name of the HealthCheck resource to + delete. + + This corresponds to the ``health_check`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -501,6 +580,31 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -655,22 +759,97 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, health_check_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionHealthCheckRequest): + request = compute.InsertRegionHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check_resource is not None: + request.health_check_resource = health_check_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionHealthCheckRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check_resource: compute.HealthCheck = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a HealthCheck resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionHealthCheckRequest, dict]): + The request object. A request message for + RegionHealthChecks.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_resource (google.cloud.compute_v1.types.HealthCheck): + The body resource for this request + This corresponds to the ``health_check_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -710,6 +889,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -858,22 +1062,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -920,6 +1111,133 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchRegionHealthCheckRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check: str = None, + health_check_resource: compute.HealthCheck = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates a HealthCheck resource in the specified + project using the data included in the request. This + method supports PATCH semantics and uses the JSON merge + patch format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionHealthCheckRequest, dict]): + The request object. A request message for + RegionHealthChecks.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check (str): + Name of the HealthCheck resource to + patch. + + This corresponds to the ``health_check`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_resource (google.cloud.compute_v1.types.HealthCheck): + The body resource for this request + This corresponds to the ``health_check_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, health_check, health_check_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionHealthCheckRequest): + request = compute.PatchRegionHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check is not None: + request.health_check = health_check + if health_check_resource is not None: + request.health_check_resource = health_check_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateRegionHealthCheckRequest, dict] = None, @@ -971,22 +1289,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1033,6 +1338,131 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateRegionHealthCheckRequest, dict] = None, + *, + project: str = None, + region: str = None, + health_check: str = None, + health_check_resource: compute.HealthCheck = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates a HealthCheck resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateRegionHealthCheckRequest, dict]): + The request object. A request message for + RegionHealthChecks.Update. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check (str): + Name of the HealthCheck resource to + update. + + This corresponds to the ``health_check`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + health_check_resource (google.cloud.compute_v1.types.HealthCheck): + The body resource for this request + This corresponds to the ``health_check_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, health_check, health_check_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateRegionHealthCheckRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateRegionHealthCheckRequest): + request = compute.UpdateRegionHealthCheckRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if health_check is not None: + request.health_check = health_check + if health_check_resource is not None: + request.health_check_resource = health_check_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_health_checks/transports/base.py b/google/cloud/compute_v1/services/region_health_checks/transports/base.py index 282f49ffe..f65954e41 100644 --- a/google/cloud/compute_v1/services/region_health_checks/transports/base.py +++ b/google/cloud/compute_v1/services/region_health_checks/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -218,5 +221,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionHealthChecksTransport",) diff --git a/google/cloud/compute_v1/services/region_health_checks/transports/rest.py b/google/cloud/compute_v1/services/region_health_checks/transports/rest.py index db0b80e76..d477cf490 100644 --- a/google/cloud/compute_v1/services/region_health_checks/transports/rest.py +++ b/google/cloud/compute_v1/services/region_health_checks/transports/rest.py @@ -1062,6 +1062,10 @@ def update( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_instance_group_managers/client.py b/google/cloud/compute_v1/services/region_instance_group_managers/client.py index dec49f4d4..8be61bc4c 100644 --- a/google/cloud/compute_v1/services/region_instance_group_managers/client.py +++ b/google/cloud/compute_v1/services/region_instance_group_managers/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_instance_group_managers import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionInstanceGroupManagersTransport, DEFAULT_CLIENT_INFO @@ -469,22 +472,9 @@ def abandon_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -543,28 +533,42 @@ def abandon_instances_unary( # Done; return the response. return response - def apply_updates_to_instances_unary( + def abandon_instances( self, request: Union[ - compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict + compute.AbandonInstancesRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_managers_apply_updates_request_resource: compute.RegionInstanceGroupManagersApplyUpdatesRequest = None, + region_instance_group_managers_abandon_instances_request_resource: compute.RegionInstanceGroupManagersAbandonInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Apply updates to selected instances the managed - instance group. + ) -> extended_operation.ExtendedOperation: + r"""Flags the specified instances to be immediately + removed from the managed instance group. Abandoning an + instance does not delete the instance, but it does + remove the instance from any target pools that are + applied by the managed instance group. This method + reduces the targetSize of the managed instance group by + the number of instances that you abandon. This operation + is marked as DONE when the action is scheduled even if + the instances have not yet been removed from the group. + You must separately verify the status of the abandoning + action with the listmanagedinstances method. If the + group is part of a backend service that has enabled + connection draining, it can take up to 60 seconds after + the connection draining duration has elapsed before the + VM instance is removed or deleted. You can specify a + maximum of 1000 instances with this method per request. Args: - request (Union[google.cloud.compute_v1.types.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.AbandonInstancesRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.ApplyUpdatesToInstances. See - the method description for details. + RegionInstanceGroupManagers.AbandonInstances. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -572,21 +576,19 @@ def apply_updates_to_instances_unary( should not be set. region (str): Name of the region scoping this - request, should conform to RFC1035. + request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - The name of the managed instance - group, should conform to RFC1035. - + Name of the managed instance group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_managers_apply_updates_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersApplyUpdatesRequest): + region_instance_group_managers_abandon_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersAbandonInstancesRequest): The body resource for this request - This corresponds to the ``region_instance_group_managers_apply_updates_request_resource`` field + This corresponds to the ``region_instance_group_managers_abandon_instances_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -596,22 +598,9 @@ def apply_updates_to_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -622,7 +611,7 @@ def apply_updates_to_instances_unary( project, region, instance_group_manager, - region_instance_group_managers_apply_updates_request_resource, + region_instance_group_managers_abandon_instances_request_resource, ] ) if request is not None and has_flattened_params: @@ -632,15 +621,13 @@ def apply_updates_to_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest. + # in a compute.AbandonInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest + request, compute.AbandonInstancesRegionInstanceGroupManagerRequest ): - request = compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest( - request - ) + request = compute.AbandonInstancesRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -650,18 +637,16 @@ def apply_updates_to_instances_unary( if instance_group_manager is not None: request.instance_group_manager = instance_group_manager if ( - region_instance_group_managers_apply_updates_request_resource + region_instance_group_managers_abandon_instances_request_resource is not None ): - request.region_instance_group_managers_apply_updates_request_resource = ( - region_instance_group_managers_apply_updates_request_resource + request.region_instance_group_managers_abandon_instances_request_resource = ( + region_instance_group_managers_abandon_instances_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.apply_updates_to_instances - ] + rpc = self._transport._wrapped_methods[self._transport.abandon_instances] # Send the request. response = rpc( @@ -671,60 +656,78 @@ def apply_updates_to_instances_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def create_instances_unary( + def apply_updates_to_instances_unary( self, request: Union[ - compute.CreateInstancesRegionInstanceGroupManagerRequest, dict + compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_managers_create_instances_request_resource: compute.RegionInstanceGroupManagersCreateInstancesRequest = None, + region_instance_group_managers_apply_updates_request_resource: compute.RegionInstanceGroupManagersApplyUpdatesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Creates instances with per-instance configs in this - regional managed instance group. Instances are created - using the current instance template. The create - instances operation is marked DONE if the - createInstances request is successful. The underlying - actions take additional time. You must separately verify - the status of the creating or actions with the - listmanagedinstances method. + r"""Apply updates to selected instances the managed + instance group. Args: - request (Union[google.cloud.compute_v1.types.CreateInstancesRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.CreateInstances. See the - method description for details. + RegionInstanceGroupManagers.ApplyUpdatesToInstances. See + the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - The name of the region where the - managed instance group is located. It - should conform to RFC1035. + Name of the region scoping this + request, should conform to RFC1035. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. It should conform to RFC1035. + group, should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_managers_create_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersCreateInstancesRequest): + region_instance_group_managers_apply_updates_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersApplyUpdatesRequest): The body resource for this request - This corresponds to the ``region_instance_group_managers_create_instances_request_resource`` field + This corresponds to the ``region_instance_group_managers_apply_updates_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -734,22 +737,9 @@ def create_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -760,7 +750,7 @@ def create_instances_unary( project, region, instance_group_manager, - region_instance_group_managers_create_instances_request_resource, + region_instance_group_managers_apply_updates_request_resource, ] ) if request is not None and has_flattened_params: @@ -770,13 +760,15 @@ def create_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.CreateInstancesRegionInstanceGroupManagerRequest. + # in a compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.CreateInstancesRegionInstanceGroupManagerRequest + request, compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest ): - request = compute.CreateInstancesRegionInstanceGroupManagerRequest(request) + request = compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -786,16 +778,18 @@ def create_instances_unary( if instance_group_manager is not None: request.instance_group_manager = instance_group_manager if ( - region_instance_group_managers_create_instances_request_resource + region_instance_group_managers_apply_updates_request_resource is not None ): - request.region_instance_group_managers_create_instances_request_resource = ( - region_instance_group_managers_create_instances_request_resource + request.region_instance_group_managers_apply_updates_request_resource = ( + region_instance_group_managers_apply_updates_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_instances] + rpc = self._transport._wrapped_methods[ + self._transport.apply_updates_to_instances + ] # Send the request. response = rpc( @@ -808,25 +802,28 @@ def create_instances_unary( # Done; return the response. return response - def delete_unary( + def apply_updates_to_instances( self, - request: Union[compute.DeleteRegionInstanceGroupManagerRequest, dict] = None, + request: Union[ + compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict + ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, + region_instance_group_managers_apply_updates_request_resource: compute.RegionInstanceGroupManagersApplyUpdatesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes the specified managed instance group and all - of the instances in that group. + ) -> extended_operation.ExtendedOperation: + r"""Apply updates to selected instances the managed + instance group. Args: - request (Union[google.cloud.compute_v1.types.DeleteRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.Delete. See the method - description for details. + RegionInstanceGroupManagers.ApplyUpdatesToInstances. See + the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -834,18 +831,23 @@ def delete_unary( should not be set. region (str): Name of the region scoping this - request. + request, should conform to RFC1035. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - Name of the managed instance group to - delete. + The name of the managed instance + group, should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + region_instance_group_managers_apply_updates_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersApplyUpdatesRequest): + The body resource for this request + This corresponds to the ``region_instance_group_managers_apply_updates_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -853,28 +855,22 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, instance_group_manager]) + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_managers_apply_updates_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -882,11 +878,15 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteRegionInstanceGroupManagerRequest. + # in a compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteRegionInstanceGroupManagerRequest): - request = compute.DeleteRegionInstanceGroupManagerRequest(request) + if not isinstance( + request, compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest + ): + request = compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -895,10 +895,19 @@ def delete_unary( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if ( + region_instance_group_managers_apply_updates_request_resource + is not None + ): + request.region_instance_group_managers_apply_updates_request_resource = ( + region_instance_group_managers_apply_updates_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[ + self._transport.apply_updates_to_instances + ] # Send the request. response = rpc( @@ -908,43 +917,61 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def delete_instances_unary( + def create_instances_unary( self, request: Union[ - compute.DeleteInstancesRegionInstanceGroupManagerRequest, dict + compute.CreateInstancesRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_managers_delete_instances_request_resource: compute.RegionInstanceGroupManagersDeleteInstancesRequest = None, + region_instance_group_managers_create_instances_request_resource: compute.RegionInstanceGroupManagersCreateInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Flags the specified instances in the managed instance - group to be immediately deleted. The instances are also - removed from any target pools of which they were a - member. This method reduces the targetSize of the - managed instance group by the number of instances that - you delete. The deleteInstances operation is marked DONE - if the deleteInstances request is successful. The - underlying actions take additional time. You must - separately verify the status of the deleting action with - the listmanagedinstances method. If the group is part of - a backend service that has enabled connection draining, - it can take up to 60 seconds after the connection - draining duration has elapsed before the VM instance is - removed or deleted. You can specify a maximum of 1000 - instances with this method per request. + r"""Creates instances with per-instance configs in this + regional managed instance group. Instances are created + using the current instance template. The create + instances operation is marked DONE if the + createInstances request is successful. The underlying + actions take additional time. You must separately verify + the status of the creating or actions with the + listmanagedinstances method. Args: - request (Union[google.cloud.compute_v1.types.DeleteInstancesRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.CreateInstancesRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.DeleteInstances. See the + RegionInstanceGroupManagers.CreateInstances. See the method description for details. project (str): Project ID for this request. @@ -952,20 +979,23 @@ def delete_instances_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region scoping this - request. + The name of the region where the + managed instance group is located. It + should conform to RFC1035. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - Name of the managed instance group. + The name of the managed instance + group. It should conform to RFC1035. + This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_managers_delete_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersDeleteInstancesRequest): + region_instance_group_managers_create_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersCreateInstancesRequest): The body resource for this request - This corresponds to the ``region_instance_group_managers_delete_instances_request_resource`` field + This corresponds to the ``region_instance_group_managers_create_instances_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -975,22 +1005,9 @@ def delete_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1001,7 +1018,7 @@ def delete_instances_unary( project, region, instance_group_manager, - region_instance_group_managers_delete_instances_request_resource, + region_instance_group_managers_create_instances_request_resource, ] ) if request is not None and has_flattened_params: @@ -1011,13 +1028,13 @@ def delete_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteInstancesRegionInstanceGroupManagerRequest. + # in a compute.CreateInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.DeleteInstancesRegionInstanceGroupManagerRequest + request, compute.CreateInstancesRegionInstanceGroupManagerRequest ): - request = compute.DeleteInstancesRegionInstanceGroupManagerRequest(request) + request = compute.CreateInstancesRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1027,16 +1044,16 @@ def delete_instances_unary( if instance_group_manager is not None: request.instance_group_manager = instance_group_manager if ( - region_instance_group_managers_delete_instances_request_resource + region_instance_group_managers_create_instances_request_resource is not None ): - request.region_instance_group_managers_delete_instances_request_resource = ( - region_instance_group_managers_delete_instances_request_resource + request.region_instance_group_managers_create_instances_request_resource = ( + region_instance_group_managers_create_instances_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_instances] + rpc = self._transport._wrapped_methods[self._transport.create_instances] # Send the request. response = rpc( @@ -1049,36 +1066,43 @@ def delete_instances_unary( # Done; return the response. return response - def delete_per_instance_configs_unary( + def create_instances( self, request: Union[ - compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, dict + compute.CreateInstancesRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_manager_delete_instance_config_req_resource: compute.RegionInstanceGroupManagerDeleteInstanceConfigReq = None, + region_instance_group_managers_create_instances_request_resource: compute.RegionInstanceGroupManagersCreateInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes selected per-instance configs for the managed - instance group. - - Args: - request (Union[google.cloud.compute_v1.types.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): - The request object. A request message for - RegionInstanceGroupManagers.DeletePerInstanceConfigs. - See the method description for details. + ) -> extended_operation.ExtendedOperation: + r"""Creates instances with per-instance configs in this + regional managed instance group. Instances are created + using the current instance template. The create + instances operation is marked DONE if the + createInstances request is successful. The underlying + actions take additional time. You must separately verify + the status of the creating or actions with the + listmanagedinstances method. + + Args: + request (Union[google.cloud.compute_v1.types.CreateInstancesRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.CreateInstances. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region scoping this - request, should conform to RFC1035. + The name of the region where the + managed instance group is located. It + should conform to RFC1035. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this @@ -1090,9 +1114,9 @@ def delete_per_instance_configs_unary( This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_manager_delete_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerDeleteInstanceConfigReq): + region_instance_group_managers_create_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersCreateInstancesRequest): The body resource for this request - This corresponds to the ``region_instance_group_manager_delete_instance_config_req_resource`` field + This corresponds to the ``region_instance_group_managers_create_instances_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1102,22 +1126,9 @@ def delete_per_instance_configs_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1128,7 +1139,7 @@ def delete_per_instance_configs_unary( project, region, instance_group_manager, - region_instance_group_manager_delete_instance_config_req_resource, + region_instance_group_managers_create_instances_request_resource, ] ) if request is not None and has_flattened_params: @@ -1138,15 +1149,13 @@ def delete_per_instance_configs_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest. + # in a compute.CreateInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest + request, compute.CreateInstancesRegionInstanceGroupManagerRequest ): - request = compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest( - request - ) + request = compute.CreateInstancesRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1156,18 +1165,16 @@ def delete_per_instance_configs_unary( if instance_group_manager is not None: request.instance_group_manager = instance_group_manager if ( - region_instance_group_manager_delete_instance_config_req_resource + region_instance_group_managers_create_instances_request_resource is not None ): - request.region_instance_group_manager_delete_instance_config_req_resource = ( - region_instance_group_manager_delete_instance_config_req_resource + request.region_instance_group_managers_create_instances_request_resource = ( + region_instance_group_managers_create_instances_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.delete_per_instance_configs - ] + rpc = self._transport._wrapped_methods[self._transport.create_instances] # Send the request. response = rpc( @@ -1177,12 +1184,37 @@ def delete_per_instance_configs_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get( + def delete_unary( self, - request: Union[compute.GetRegionInstanceGroupManagerRequest, dict] = None, + request: Union[compute.DeleteRegionInstanceGroupManagerRequest, dict] = None, *, project: str = None, region: str = None, @@ -1190,14 +1222,14 @@ def get( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.InstanceGroupManager: - r"""Returns all of the details about the specified - managed instance group. + ) -> compute.Operation: + r"""Deletes the specified managed instance group and all + of the instances in that group. Args: - request (Union[google.cloud.compute_v1.types.GetRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.Get. See the method + RegionInstanceGroupManagers.Delete. See the method description for details. project (str): Project ID for this request. @@ -1213,7 +1245,7 @@ def get( should not be set. instance_group_manager (str): Name of the managed instance group to - return. + delete. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this @@ -1225,16 +1257,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.InstanceGroupManager: - Represents a Managed Instance Group - resource. An instance group is a - collection of VM instances that you can - manage as a single entity. For more - information, read Instance groups. For - zonal Managed Instance Group, use the - instanceGroupManagers resource. For - regional Managed Instance Group, use the - regionInstanceGroupManagers resource. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1248,11 +1273,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetRegionInstanceGroupManagerRequest. + # in a compute.DeleteRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetRegionInstanceGroupManagerRequest): - request = compute.GetRegionInstanceGroupManagerRequest(request) + if not isinstance(request, compute.DeleteRegionInstanceGroupManagerRequest): + request = compute.DeleteRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1264,7 +1289,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1277,32 +1302,24 @@ def get( # Done; return the response. return response - def insert_unary( + def delete( self, - request: Union[compute.InsertRegionInstanceGroupManagerRequest, dict] = None, + request: Union[compute.DeleteRegionInstanceGroupManagerRequest, dict] = None, *, project: str = None, region: str = None, - instance_group_manager_resource: compute.InstanceGroupManager = None, + instance_group_manager: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates a managed instance group using the - information that you specify in the request. After the - group is created, instances in the group are created - using the specified instance template. This operation is - marked as DONE when the group is created even if the - instances in the group have not yet been created. You - must separately verify the status of the individual - instances with the listmanagedinstances method. A - regional managed instance group can contain up to 2000 - instances. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified managed instance group and all + of the instances in that group. Args: - request (Union[google.cloud.compute_v1.types.InsertRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.Insert. See the method + RegionInstanceGroupManagers.Delete. See the method description for details. project (str): Project ID for this request. @@ -1316,9 +1333,11 @@ def insert_unary( This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): - The body resource for this request - This corresponds to the ``instance_group_manager_resource`` field + instance_group_manager (str): + Name of the managed instance group to + delete. + + This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1328,28 +1347,15 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, instance_group_manager_resource]) + has_flattened_params = any([project, region, instance_group_manager]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1357,25 +1363,23 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertRegionInstanceGroupManagerRequest. + # in a compute.DeleteRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertRegionInstanceGroupManagerRequest): - request = compute.InsertRegionInstanceGroupManagerRequest(request) + if not isinstance(request, compute.DeleteRegionInstanceGroupManagerRequest): + request = compute.DeleteRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if instance_group_manager_resource is not None: - request.instance_group_manager_resource = ( - instance_group_manager_resource - ) + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1385,27 +1389,69 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def list( + def delete_instances_unary( self, - request: Union[compute.ListRegionInstanceGroupManagersRequest, dict] = None, + request: Union[ + compute.DeleteInstancesRegionInstanceGroupManagerRequest, dict + ] = None, *, project: str = None, region: str = None, + instance_group_manager: str = None, + region_instance_group_managers_delete_instances_request_resource: compute.RegionInstanceGroupManagersDeleteInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves the list of managed instance groups that - are contained within the specified region. + ) -> compute.Operation: + r"""Flags the specified instances in the managed instance + group to be immediately deleted. The instances are also + removed from any target pools of which they were a + member. This method reduces the targetSize of the + managed instance group by the number of instances that + you delete. The deleteInstances operation is marked DONE + if the deleteInstances request is successful. The + underlying actions take additional time. You must + separately verify the status of the deleting action with + the listmanagedinstances method. If the group is part of + a backend service that has enabled connection draining, + it can take up to 60 seconds after the connection + draining duration has elapsed before the VM instance is + removed or deleted. You can specify a maximum of 1000 + instances with this method per request. Args: - request (Union[google.cloud.compute_v1.types.ListRegionInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstancesRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.List. See the method - description for details. + RegionInstanceGroupManagers.DeleteInstances. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1418,6 +1464,16 @@ def list( This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + instance_group_manager (str): + Name of the managed instance group. + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_instance_group_managers_delete_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersDeleteInstancesRequest): + The body resource for this request + This corresponds to the ``region_instance_group_managers_delete_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1425,18 +1481,22 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListPager: - Contains a list of managed instance - groups. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region]) + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_managers_delete_instances_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1444,21 +1504,32 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListRegionInstanceGroupManagersRequest. + # in a compute.DeleteInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListRegionInstanceGroupManagersRequest): - request = compute.ListRegionInstanceGroupManagersRequest(request) + if not isinstance( + request, compute.DeleteInstancesRegionInstanceGroupManagerRequest + ): + request = compute.DeleteInstancesRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if ( + region_instance_group_managers_delete_instances_request_resource + is not None + ): + request.region_instance_group_managers_delete_instances_request_resource = ( + region_instance_group_managers_delete_instances_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.delete_instances] # Send the request. response = rpc( @@ -1468,40 +1539,44 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def list_errors( + def delete_instances( self, request: Union[ - compute.ListErrorsRegionInstanceGroupManagersRequest, dict + compute.DeleteInstancesRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, + region_instance_group_managers_delete_instances_request_resource: compute.RegionInstanceGroupManagersDeleteInstancesRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListErrorsPager: - r"""Lists all errors thrown by actions on instances for a - given regional managed instance group. The filter and - orderBy query parameters are not supported. + ) -> extended_operation.ExtendedOperation: + r"""Flags the specified instances in the managed instance + group to be immediately deleted. The instances are also + removed from any target pools of which they were a + member. This method reduces the targetSize of the + managed instance group by the number of instances that + you delete. The deleteInstances operation is marked DONE + if the deleteInstances request is successful. The + underlying actions take additional time. You must + separately verify the status of the deleting action with + the listmanagedinstances method. If the group is part of + a backend service that has enabled connection draining, + it can take up to 60 seconds after the connection + draining duration has elapsed before the VM instance is + removed or deleted. You can specify a maximum of 1000 + instances with this method per request. Args: - request (Union[google.cloud.compute_v1.types.ListErrorsRegionInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteInstancesRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.ListErrors. See the method - description for details. + RegionInstanceGroupManagers.DeleteInstances. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1509,20 +1584,21 @@ def list_errors( should not be set. region (str): Name of the region scoping this - request. This should conform to RFC1035. + request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - The name of the managed instance group. It must be a - string that meets the requirements in RFC1035, or an - unsigned long integer: must match regexp pattern: - (?:`a-z `__?)|1-9{0,19}. - + Name of the managed instance group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + region_instance_group_managers_delete_instances_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersDeleteInstancesRequest): + The body resource for this request + This corresponds to the ``region_instance_group_managers_delete_instances_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1530,16 +1606,22 @@ def list_errors( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListErrorsPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, instance_group_manager]) + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_managers_delete_instances_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1547,13 +1629,13 @@ def list_errors( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListErrorsRegionInstanceGroupManagersRequest. + # in a compute.DeleteInstancesRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.ListErrorsRegionInstanceGroupManagersRequest + request, compute.DeleteInstancesRegionInstanceGroupManagerRequest ): - request = compute.ListErrorsRegionInstanceGroupManagersRequest(request) + request = compute.DeleteInstancesRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1562,10 +1644,17 @@ def list_errors( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if ( + region_instance_group_managers_delete_instances_request_resource + is not None + ): + request.region_instance_group_managers_delete_instances_request_resource = ( + region_instance_group_managers_delete_instances_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_errors] + rpc = self._transport._wrapped_methods[self._transport.delete_instances] # Send the request. response = rpc( @@ -1575,42 +1664,56 @@ def list_errors( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListErrorsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def list_managed_instances( + def delete_per_instance_configs_unary( self, request: Union[ - compute.ListManagedInstancesRegionInstanceGroupManagersRequest, dict + compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, + region_instance_group_manager_delete_instance_config_req_resource: compute.RegionInstanceGroupManagerDeleteInstanceConfigReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListManagedInstancesPager: - r"""Lists the instances in the managed instance group and - instances that are scheduled to be created. The list - includes any current actions that the group has - scheduled for its instances. The orderBy query parameter - is not supported. + ) -> compute.Operation: + r"""Deletes selected per-instance configs for the managed + instance group. Args: - request (Union[google.cloud.compute_v1.types.ListManagedInstancesRegionInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.ListManagedInstances. See - the method description for details. + RegionInstanceGroupManagers.DeletePerInstanceConfigs. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1618,18 +1721,23 @@ def list_managed_instances( should not be set. region (str): Name of the region scoping this - request. + request, should conform to RFC1035. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. + group. It should conform to RFC1035. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + region_instance_group_manager_delete_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerDeleteInstanceConfigReq): + The body resource for this request + This corresponds to the ``region_instance_group_manager_delete_instance_config_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1637,16 +1745,22 @@ def list_managed_instances( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListManagedInstancesPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, instance_group_manager]) + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_manager_delete_instance_config_req_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1654,13 +1768,13 @@ def list_managed_instances( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListManagedInstancesRegionInstanceGroupManagersRequest. + # in a compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.ListManagedInstancesRegionInstanceGroupManagersRequest + request, compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest ): - request = compute.ListManagedInstancesRegionInstanceGroupManagersRequest( + request = compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest( request ) # If we have keyword arguments corresponding to fields on the @@ -1671,10 +1785,19 @@ def list_managed_instances( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if ( + region_instance_group_manager_delete_instance_config_req_resource + is not None + ): + request.region_instance_group_manager_delete_instance_config_req_resource = ( + region_instance_group_manager_delete_instance_config_req_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_managed_instances] + rpc = self._transport._wrapped_methods[ + self._transport.delete_per_instance_configs + ] # Send the request. response = rpc( @@ -1684,40 +1807,31 @@ def list_managed_instances( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListManagedInstancesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def list_per_instance_configs( + def delete_per_instance_configs( self, request: Union[ - compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, dict + compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, + region_instance_group_manager_delete_instance_config_req_resource: compute.RegionInstanceGroupManagerDeleteInstanceConfigReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPerInstanceConfigsPager: - r"""Lists all of the per-instance configs defined for the - managed instance group. The orderBy query parameter is - not supported. + ) -> extended_operation.ExtendedOperation: + r"""Deletes selected per-instance configs for the managed + instance group. Args: - request (Union[google.cloud.compute_v1.types.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.ListPerInstanceConfigs. See - the method description for details. + RegionInstanceGroupManagers.DeletePerInstanceConfigs. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1737,6 +1851,11 @@ def list_per_instance_configs( This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + region_instance_group_manager_delete_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerDeleteInstanceConfigReq): + The body resource for this request + This corresponds to the ``region_instance_group_manager_delete_instance_config_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1744,16 +1863,22 @@ def list_per_instance_configs( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListPerInstanceConfigsPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, instance_group_manager]) + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_manager_delete_instance_config_req_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1761,13 +1886,13 @@ def list_per_instance_configs( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest. + # in a compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest + request, compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest ): - request = compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest( + request = compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest( request ) # If we have keyword arguments corresponding to fields on the @@ -1778,11 +1903,18 @@ def list_per_instance_configs( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager + if ( + region_instance_group_manager_delete_instance_config_req_resource + is not None + ): + request.region_instance_group_manager_delete_instance_config_req_resource = ( + region_instance_group_manager_delete_instance_config_req_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = self._transport._wrapped_methods[ - self._transport.list_per_instance_configs + self._transport.delete_per_instance_configs ] # Send the request. @@ -1793,49 +1925,52 @@ def list_per_instance_configs( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPerInstanceConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def patch_unary( + def get( self, - request: Union[compute.PatchRegionInstanceGroupManagerRequest, dict] = None, + request: Union[compute.GetRegionInstanceGroupManagerRequest, dict] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - instance_group_manager_resource: compute.InstanceGroupManager = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Updates a managed instance group using the - information that you specify in the request. This - operation is marked as DONE when the group is patched - even if the instances in the group are still in the - process of being patched. You must separately verify the - status of the individual instances with the - listmanagedinstances method. This method supports PATCH - semantics and uses the JSON merge patch format and - processing rules. If you update your group to specify a - new template or instance configuration, it's possible - that your intended specification for each VM in the - group is different from the current state of that VM. To - learn how to apply an updated configuration to the VMs - in a MIG, see Updating instances in a MIG. + ) -> compute.InstanceGroupManager: + r"""Returns all of the details about the specified + managed instance group. Args: - request (Union[google.cloud.compute_v1.types.PatchRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.GetRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.Patch. See the method + RegionInstanceGroupManagers.Get. See the method description for details. project (str): Project ID for this request. @@ -1850,17 +1985,12 @@ def patch_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - The name of the instance group - manager. + Name of the managed instance group to + return. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): - The body resource for this request - This corresponds to the ``instance_group_manager_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1868,30 +1998,22 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.cloud.compute_v1.types.InstanceGroupManager: + Represents a Managed Instance Group + resource. An instance group is a + collection of VM instances that you can + manage as a single entity. For more + information, read Instance groups. For + zonal Managed Instance Group, use the + instanceGroupManagers resource. For + regional Managed Instance Group, use the + regionInstanceGroupManagers resource. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, region, instance_group_manager, instance_group_manager_resource] - ) + has_flattened_params = any([project, region, instance_group_manager]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1899,11 +2021,11 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchRegionInstanceGroupManagerRequest. + # in a compute.GetRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchRegionInstanceGroupManagerRequest): - request = compute.PatchRegionInstanceGroupManagerRequest(request) + if not isinstance(request, compute.GetRegionInstanceGroupManagerRequest): + request = compute.GetRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1912,14 +2034,10 @@ def patch_unary( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if instance_group_manager_resource is not None: - request.instance_group_manager_resource = ( - instance_group_manager_resource - ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.get] # Send the request. response = rpc( @@ -1932,30 +2050,1699 @@ def patch_unary( # Done; return the response. return response - def patch_per_instance_configs_unary( + def insert_unary( self, - request: Union[ - compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, dict - ] = None, + request: Union[compute.InsertRegionInstanceGroupManagerRequest, dict] = None, *, project: str = None, region: str = None, - instance_group_manager: str = None, - region_instance_group_manager_patch_instance_config_req_resource: compute.RegionInstanceGroupManagerPatchInstanceConfigReq = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Inserts or patches per-instance configs for the - managed instance group. perInstanceConfig.name serves as - a key used to distinguish whether to perform insert or - patch. - - Args: - request (Union[google.cloud.compute_v1.types.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): - The request object. A request message for - RegionInstanceGroupManagers.PatchPerInstanceConfigs. See - the method description for details. + r"""Creates a managed instance group using the + information that you specify in the request. After the + group is created, instances in the group are created + using the specified instance template. This operation is + marked as DONE when the group is created even if the + instances in the group have not yet been created. You + must separately verify the status of the individual + instances with the listmanagedinstances method. A + regional managed instance group can contain up to 2000 + instances. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionInstanceGroupManagerRequest): + request = compute.InsertRegionInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + region: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a managed instance group using the + information that you specify in the request. After the + group is created, instances in the group are created + using the specified instance template. This operation is + marked as DONE when the group is created even if the + instances in the group have not yet been created. You + must separately verify the status of the individual + instances with the listmanagedinstances method. A + regional managed instance group can contain up to 2000 + instances. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionInstanceGroupManagerRequest): + request = compute.InsertRegionInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListRegionInstanceGroupManagersRequest, dict] = None, + *, + project: str = None, + region: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves the list of managed instance groups that + are contained within the specified region. + + Args: + request (Union[google.cloud.compute_v1.types.ListRegionInstanceGroupManagersRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.List. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListPager: + Contains a list of managed instance + groups. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListRegionInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListRegionInstanceGroupManagersRequest): + request = compute.ListRegionInstanceGroupManagersRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_errors( + self, + request: Union[ + compute.ListErrorsRegionInstanceGroupManagersRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListErrorsPager: + r"""Lists all errors thrown by actions on instances for a + given regional managed instance group. The filter and + orderBy query parameters are not supported. + + Args: + request (Union[google.cloud.compute_v1.types.ListErrorsRegionInstanceGroupManagersRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.ListErrors. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. This should conform to RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance group. It must be a + string that meets the requirements in RFC1035, or an + unsigned long integer: must match regexp pattern: + (?:`a-z `__?)|1-9{0,19}. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListErrorsPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListErrorsRegionInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.ListErrorsRegionInstanceGroupManagersRequest + ): + request = compute.ListErrorsRegionInstanceGroupManagersRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_errors] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListErrorsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_managed_instances( + self, + request: Union[ + compute.ListManagedInstancesRegionInstanceGroupManagersRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListManagedInstancesPager: + r"""Lists the instances in the managed instance group and + instances that are scheduled to be created. The list + includes any current actions that the group has + scheduled for its instances. The orderBy query parameter + is not supported. + + Args: + request (Union[google.cloud.compute_v1.types.ListManagedInstancesRegionInstanceGroupManagersRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.ListManagedInstances. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListManagedInstancesPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListManagedInstancesRegionInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.ListManagedInstancesRegionInstanceGroupManagersRequest + ): + request = compute.ListManagedInstancesRegionInstanceGroupManagersRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_managed_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListManagedInstancesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_per_instance_configs( + self, + request: Union[ + compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPerInstanceConfigsPager: + r"""Lists all of the per-instance configs defined for the + managed instance group. The orderBy query parameter is + not supported. + + Args: + request (Union[google.cloud.compute_v1.types.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.ListPerInstanceConfigs. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request, should conform to RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. It should conform to RFC1035. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.region_instance_group_managers.pagers.ListPerInstanceConfigsPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest + ): + request = compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.list_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPerInstanceConfigsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchRegionInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Updates a managed instance group using the + information that you specify in the request. This + operation is marked as DONE when the group is patched + even if the instances in the group are still in the + process of being patched. You must separately verify the + status of the individual instances with the + listmanagedinstances method. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. If you update your group to specify a + new template or instance configuration, it's possible + that your intended specification for each VM in the + group is different from the current state of that VM. To + learn how to apply an updated configuration to the VMs + in a MIG, see Updating instances in a MIG. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the instance group + manager. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, instance_group_manager, instance_group_manager_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionInstanceGroupManagerRequest): + request = compute.PatchRegionInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchRegionInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + instance_group_manager_resource: compute.InstanceGroupManager = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates a managed instance group using the + information that you specify in the request. This + operation is marked as DONE when the group is patched + even if the instances in the group are still in the + process of being patched. You must separately verify the + status of the individual instances with the + listmanagedinstances method. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. If you update your group to specify a + new template or instance configuration, it's possible + that your intended specification for each VM in the + group is different from the current state of that VM. To + learn how to apply an updated configuration to the VMs + in a MIG, see Updating instances in a MIG. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the instance group + manager. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager_resource (google.cloud.compute_v1.types.InstanceGroupManager): + The body resource for this request + This corresponds to the ``instance_group_manager_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, instance_group_manager, instance_group_manager_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionInstanceGroupManagerRequest): + request = compute.PatchRegionInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if instance_group_manager_resource is not None: + request.instance_group_manager_resource = ( + instance_group_manager_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def patch_per_instance_configs_unary( + self, + request: Union[ + compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + region_instance_group_manager_patch_instance_config_req_resource: compute.RegionInstanceGroupManagerPatchInstanceConfigReq = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Inserts or patches per-instance configs for the + managed instance group. perInstanceConfig.name serves as + a key used to distinguish whether to perform insert or + patch. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.PatchPerInstanceConfigs. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request, should conform to RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. It should conform to RFC1035. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_instance_group_manager_patch_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerPatchInstanceConfigReq): + The body resource for this request + This corresponds to the ``region_instance_group_manager_patch_instance_config_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_manager_patch_instance_config_req_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest + ): + request = compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if ( + region_instance_group_manager_patch_instance_config_req_resource + is not None + ): + request.region_instance_group_manager_patch_instance_config_req_resource = ( + region_instance_group_manager_patch_instance_config_req_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.patch_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_per_instance_configs( + self, + request: Union[ + compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + region_instance_group_manager_patch_instance_config_req_resource: compute.RegionInstanceGroupManagerPatchInstanceConfigReq = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Inserts or patches per-instance configs for the + managed instance group. perInstanceConfig.name serves as + a key used to distinguish whether to perform insert or + patch. + + Args: + request (Union[google.cloud.compute_v1.types.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.PatchPerInstanceConfigs. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request, should conform to RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + The name of the managed instance + group. It should conform to RFC1035. + + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_instance_group_manager_patch_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerPatchInstanceConfigReq): + The body resource for this request + This corresponds to the ``region_instance_group_manager_patch_instance_config_req_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_manager_patch_instance_config_req_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest + ): + request = compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if ( + region_instance_group_manager_patch_instance_config_req_resource + is not None + ): + request.region_instance_group_manager_patch_instance_config_req_resource = ( + region_instance_group_manager_patch_instance_config_req_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.patch_per_instance_configs + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def recreate_instances_unary( + self, + request: Union[ + compute.RecreateInstancesRegionInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + region_instance_group_managers_recreate_request_resource: compute.RegionInstanceGroupManagersRecreateRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Flags the specified VM instances in the managed + instance group to be immediately recreated. Each + instance is recreated using the group's current + configuration. This operation is marked as DONE when the + flag is set even if the instances have not yet been + recreated. You must separately verify the status of each + instance by checking its currentAction field; for more + information, see Checking the status of managed + instances. If the group is part of a backend service + that has enabled connection draining, it can take up to + 60 seconds after the connection draining duration has + elapsed before the VM instance is removed or deleted. + You can specify a maximum of 1000 instances with this + method per request. + + Args: + request (Union[google.cloud.compute_v1.types.RecreateInstancesRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.RecreateInstances. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + Name of the managed instance group. + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_instance_group_managers_recreate_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersRecreateRequest): + The body resource for this request + This corresponds to the ``region_instance_group_managers_recreate_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_managers_recreate_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RecreateInstancesRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.RecreateInstancesRegionInstanceGroupManagerRequest + ): + request = compute.RecreateInstancesRegionInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if region_instance_group_managers_recreate_request_resource is not None: + request.region_instance_group_managers_recreate_request_resource = ( + region_instance_group_managers_recreate_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.recreate_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def recreate_instances( + self, + request: Union[ + compute.RecreateInstancesRegionInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + region_instance_group_managers_recreate_request_resource: compute.RegionInstanceGroupManagersRecreateRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Flags the specified VM instances in the managed + instance group to be immediately recreated. Each + instance is recreated using the group's current + configuration. This operation is marked as DONE when the + flag is set even if the instances have not yet been + recreated. You must separately verify the status of each + instance by checking its currentAction field; for more + information, see Checking the status of managed + instances. If the group is part of a backend service + that has enabled connection draining, it can take up to + 60 seconds after the connection draining duration has + elapsed before the VM instance is removed or deleted. + You can specify a maximum of 1000 instances with this + method per request. + + Args: + request (Union[google.cloud.compute_v1.types.RecreateInstancesRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.RecreateInstances. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + Name of the managed instance group. + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_instance_group_managers_recreate_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersRecreateRequest): + The body resource for this request + This corresponds to the ``region_instance_group_managers_recreate_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_managers_recreate_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RecreateInstancesRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.RecreateInstancesRegionInstanceGroupManagerRequest + ): + request = compute.RecreateInstancesRegionInstanceGroupManagerRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if region_instance_group_managers_recreate_request_resource is not None: + request.region_instance_group_managers_recreate_request_resource = ( + region_instance_group_managers_recreate_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.recreate_instances] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def resize_unary( + self, + request: Union[compute.ResizeRegionInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + size: int = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Changes the intended size of the managed instance + group. If you increase the size, the group creates new + instances using the current instance template. If you + decrease the size, the group deletes one or more + instances. The resize operation is marked DONE if the + resize request is successful. The underlying actions + take additional time. You must separately verify the + status of the creating or deleting actions with the + listmanagedinstances method. If the group is part of a + backend service that has enabled connection draining, it + can take up to 60 seconds after the connection draining + duration has elapsed before the VM instance is removed + or deleted. + + Args: + request (Union[google.cloud.compute_v1.types.ResizeRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.Resize. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + Name of the managed instance group. + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + size (int): + Number of instances that should exist + in this instance group manager. + + This corresponds to the ``size`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager, size]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResizeRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResizeRegionInstanceGroupManagerRequest): + request = compute.ResizeRegionInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if size is not None: + request.size = size + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.resize] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def resize( + self, + request: Union[compute.ResizeRegionInstanceGroupManagerRequest, dict] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + size: int = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the intended size of the managed instance + group. If you increase the size, the group creates new + instances using the current instance template. If you + decrease the size, the group deletes one or more + instances. The resize operation is marked DONE if the + resize request is successful. The underlying actions + take additional time. You must separately verify the + status of the creating or deleting actions with the + listmanagedinstances method. If the group is part of a + backend service that has enabled connection draining, it + can take up to 60 seconds after the connection draining + duration has elapsed before the VM instance is removed + or deleted. + + Args: + request (Union[google.cloud.compute_v1.types.ResizeRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.Resize. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group_manager (str): + Name of the managed instance group. + This corresponds to the ``instance_group_manager`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + size (int): + Number of instances that should exist + in this instance group manager. + + This corresponds to the ``size`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, instance_group_manager, size]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResizeRegionInstanceGroupManagerRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResizeRegionInstanceGroupManagerRequest): + request = compute.ResizeRegionInstanceGroupManagerRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group_manager is not None: + request.instance_group_manager = instance_group_manager + if size is not None: + request.size = size + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.resize] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_instance_template_unary( + self, + request: Union[ + compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + instance_group_manager: str = None, + region_instance_group_managers_set_template_request_resource: compute.RegionInstanceGroupManagersSetTemplateRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Sets the instance template to use when creating new + instances or recreating instances in this group. + Existing instances are not affected. + + Args: + request (Union[google.cloud.compute_v1.types.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict]): + The request object. A request message for + RegionInstanceGroupManagers.SetInstanceTemplate. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1963,21 +3750,21 @@ def patch_per_instance_configs_unary( should not be set. region (str): Name of the region scoping this - request, should conform to RFC1035. + request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): The name of the managed instance - group. It should conform to RFC1035. + group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_manager_patch_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerPatchInstanceConfigReq): + region_instance_group_managers_set_template_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersSetTemplateRequest): The body resource for this request - This corresponds to the ``region_instance_group_manager_patch_instance_config_req_resource`` field + This corresponds to the ``region_instance_group_managers_set_template_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1987,22 +3774,9 @@ def patch_per_instance_configs_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2013,7 +3787,7 @@ def patch_per_instance_configs_unary( project, region, instance_group_manager, - region_instance_group_manager_patch_instance_config_req_resource, + region_instance_group_managers_set_template_request_resource, ] ) if request is not None and has_flattened_params: @@ -2023,13 +3797,13 @@ def patch_per_instance_configs_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest. + # in a compute.SetInstanceTemplateRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest + request, compute.SetInstanceTemplateRegionInstanceGroupManagerRequest ): - request = compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest( + request = compute.SetInstanceTemplateRegionInstanceGroupManagerRequest( request ) # If we have keyword arguments corresponding to fields on the @@ -2040,19 +3814,14 @@ def patch_per_instance_configs_unary( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if ( - region_instance_group_manager_patch_instance_config_req_resource - is not None - ): - request.region_instance_group_manager_patch_instance_config_req_resource = ( - region_instance_group_manager_patch_instance_config_req_resource + if region_instance_group_managers_set_template_request_resource is not None: + request.region_instance_group_managers_set_template_request_resource = ( + region_instance_group_managers_set_template_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[ - self._transport.patch_per_instance_configs - ] + rpc = self._transport._wrapped_methods[self._transport.set_instance_template] # Send the request. response = rpc( @@ -2065,39 +3834,28 @@ def patch_per_instance_configs_unary( # Done; return the response. return response - def recreate_instances_unary( + def set_instance_template( self, request: Union[ - compute.RecreateInstancesRegionInstanceGroupManagerRequest, dict + compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_managers_recreate_request_resource: compute.RegionInstanceGroupManagersRecreateRequest = None, + region_instance_group_managers_set_template_request_resource: compute.RegionInstanceGroupManagersSetTemplateRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Flags the specified VM instances in the managed - instance group to be immediately recreated. Each - instance is recreated using the group's current - configuration. This operation is marked as DONE when the - flag is set even if the instances have not yet been - recreated. You must separately verify the status of each - instance by checking its currentAction field; for more - information, see Checking the status of managed - instances. If the group is part of a backend service - that has enabled connection draining, it can take up to - 60 seconds after the connection draining duration has - elapsed before the VM instance is removed or deleted. - You can specify a maximum of 1000 instances with this - method per request. + ) -> extended_operation.ExtendedOperation: + r"""Sets the instance template to use when creating new + instances or recreating instances in this group. + Existing instances are not affected. Args: - request (Union[google.cloud.compute_v1.types.RecreateInstancesRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.RecreateInstances. See the + RegionInstanceGroupManagers.SetInstanceTemplate. See the method description for details. project (str): Project ID for this request. @@ -2112,13 +3870,15 @@ def recreate_instances_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - Name of the managed instance group. + The name of the managed instance + group. + This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_managers_recreate_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersRecreateRequest): + region_instance_group_managers_set_template_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersSetTemplateRequest): The body resource for this request - This corresponds to the ``region_instance_group_managers_recreate_request_resource`` field + This corresponds to the ``region_instance_group_managers_set_template_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2128,22 +3888,9 @@ def recreate_instances_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2154,7 +3901,7 @@ def recreate_instances_unary( project, region, instance_group_manager, - region_instance_group_managers_recreate_request_resource, + region_instance_group_managers_set_template_request_resource, ] ) if request is not None and has_flattened_params: @@ -2164,13 +3911,13 @@ def recreate_instances_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RecreateInstancesRegionInstanceGroupManagerRequest. + # in a compute.SetInstanceTemplateRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.RecreateInstancesRegionInstanceGroupManagerRequest + request, compute.SetInstanceTemplateRegionInstanceGroupManagerRequest ): - request = compute.RecreateInstancesRegionInstanceGroupManagerRequest( + request = compute.SetInstanceTemplateRegionInstanceGroupManagerRequest( request ) # If we have keyword arguments corresponding to fields on the @@ -2181,14 +3928,14 @@ def recreate_instances_unary( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if region_instance_group_managers_recreate_request_resource is not None: - request.region_instance_group_managers_recreate_request_resource = ( - region_instance_group_managers_recreate_request_resource + if region_instance_group_managers_set_template_request_resource is not None: + request.region_instance_group_managers_set_template_request_resource = ( + region_instance_group_managers_set_template_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.recreate_instances] + rpc = self._transport._wrapped_methods[self._transport.set_instance_template] # Send the request. response = rpc( @@ -2198,40 +3945,57 @@ def recreate_instances_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def resize_unary( + def set_target_pools_unary( self, - request: Union[compute.ResizeRegionInstanceGroupManagerRequest, dict] = None, + request: Union[ + compute.SetTargetPoolsRegionInstanceGroupManagerRequest, dict + ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - size: int = None, + region_instance_group_managers_set_target_pools_request_resource: compute.RegionInstanceGroupManagersSetTargetPoolsRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Changes the intended size of the managed instance - group. If you increase the size, the group creates new - instances using the current instance template. If you - decrease the size, the group deletes one or more - instances. The resize operation is marked DONE if the - resize request is successful. The underlying actions - take additional time. You must separately verify the - status of the creating or deleting actions with the - listmanagedinstances method. If the group is part of a - backend service that has enabled connection draining, it - can take up to 60 seconds after the connection draining - duration has elapsed before the VM instance is removed - or deleted. + r"""Modifies the target pools to which all new instances + in this group are assigned. Existing instances in the + group are not affected. Args: - request (Union[google.cloud.compute_v1.types.ResizeRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetTargetPoolsRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.Resize. See the method - description for details. + RegionInstanceGroupManagers.SetTargetPools. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2249,11 +4013,9 @@ def resize_unary( This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - size (int): - Number of instances that should exist - in this instance group manager. - - This corresponds to the ``size`` field + region_instance_group_managers_set_target_pools_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersSetTargetPoolsRequest): + The body resource for this request + This corresponds to the ``region_instance_group_managers_set_target_pools_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2263,28 +4025,22 @@ def resize_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, instance_group_manager, size]) + has_flattened_params = any( + [ + project, + region, + instance_group_manager, + region_instance_group_managers_set_target_pools_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -2292,11 +4048,13 @@ def resize_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ResizeRegionInstanceGroupManagerRequest. + # in a compute.SetTargetPoolsRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ResizeRegionInstanceGroupManagerRequest): - request = compute.ResizeRegionInstanceGroupManagerRequest(request) + if not isinstance( + request, compute.SetTargetPoolsRegionInstanceGroupManagerRequest + ): + request = compute.SetTargetPoolsRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2305,12 +4063,17 @@ def resize_unary( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if size is not None: - request.size = size + if ( + region_instance_group_managers_set_target_pools_request_resource + is not None + ): + request.region_instance_group_managers_set_target_pools_request_resource = ( + region_instance_group_managers_set_target_pools_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.resize] + rpc = self._transport._wrapped_methods[self._transport.set_target_pools] # Send the request. response = rpc( @@ -2323,28 +4086,28 @@ def resize_unary( # Done; return the response. return response - def set_instance_template_unary( + def set_target_pools( self, request: Union[ - compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict + compute.SetTargetPoolsRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_managers_set_template_request_resource: compute.RegionInstanceGroupManagersSetTemplateRequest = None, + region_instance_group_managers_set_target_pools_request_resource: compute.RegionInstanceGroupManagersSetTargetPoolsRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets the instance template to use when creating new - instances or recreating instances in this group. - Existing instances are not affected. + ) -> extended_operation.ExtendedOperation: + r"""Modifies the target pools to which all new instances + in this group are assigned. Existing instances in the + group are not affected. Args: - request (Union[google.cloud.compute_v1.types.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetTargetPoolsRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.SetInstanceTemplate. See the + RegionInstanceGroupManagers.SetTargetPools. See the method description for details. project (str): Project ID for this request. @@ -2359,15 +4122,13 @@ def set_instance_template_unary( on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - The name of the managed instance - group. - + Name of the managed instance group. This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_managers_set_template_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersSetTemplateRequest): + region_instance_group_managers_set_target_pools_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersSetTargetPoolsRequest): The body resource for this request - This corresponds to the ``region_instance_group_managers_set_template_request_resource`` field + This corresponds to the ``region_instance_group_managers_set_target_pools_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2377,22 +4138,9 @@ def set_instance_template_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2403,7 +4151,7 @@ def set_instance_template_unary( project, region, instance_group_manager, - region_instance_group_managers_set_template_request_resource, + region_instance_group_managers_set_target_pools_request_resource, ] ) if request is not None and has_flattened_params: @@ -2413,15 +4161,13 @@ def set_instance_template_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetInstanceTemplateRegionInstanceGroupManagerRequest. + # in a compute.SetTargetPoolsRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.SetInstanceTemplateRegionInstanceGroupManagerRequest + request, compute.SetTargetPoolsRegionInstanceGroupManagerRequest ): - request = compute.SetInstanceTemplateRegionInstanceGroupManagerRequest( - request - ) + request = compute.SetTargetPoolsRegionInstanceGroupManagerRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2430,14 +4176,17 @@ def set_instance_template_unary( request.region = region if instance_group_manager is not None: request.instance_group_manager = instance_group_manager - if region_instance_group_managers_set_template_request_resource is not None: - request.region_instance_group_managers_set_template_request_resource = ( - region_instance_group_managers_set_template_request_resource + if ( + region_instance_group_managers_set_target_pools_request_resource + is not None + ): + request.region_instance_group_managers_set_target_pools_request_resource = ( + region_instance_group_managers_set_target_pools_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_instance_template] + rpc = self._transport._wrapped_methods[self._transport.set_target_pools] # Send the request. response = rpc( @@ -2447,32 +4196,58 @@ def set_instance_template_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_target_pools_unary( + def update_per_instance_configs_unary( self, request: Union[ - compute.SetTargetPoolsRegionInstanceGroupManagerRequest, dict + compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest, dict ] = None, *, project: str = None, region: str = None, instance_group_manager: str = None, - region_instance_group_managers_set_target_pools_request_resource: compute.RegionInstanceGroupManagersSetTargetPoolsRequest = None, + region_instance_group_manager_update_instance_config_req_resource: compute.RegionInstanceGroupManagerUpdateInstanceConfigReq = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Modifies the target pools to which all new instances - in this group are assigned. Existing instances in the - group are not affected. + r"""Inserts or updates per-instance configs for the + managed instance group. perInstanceConfig.name serves as + a key used to distinguish whether to perform insert or + patch. Args: - request (Union[google.cloud.compute_v1.types.SetTargetPoolsRegionInstanceGroupManagerRequest, dict]): + request (Union[google.cloud.compute_v1.types.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest, dict]): The request object. A request message for - RegionInstanceGroupManagers.SetTargetPools. See the - method description for details. + RegionInstanceGroupManagers.UpdatePerInstanceConfigs. + See the method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -2480,19 +4255,21 @@ def set_target_pools_unary( should not be set. region (str): Name of the region scoping this - request. + request, should conform to RFC1035. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. instance_group_manager (str): - Name of the managed instance group. + The name of the managed instance + group. It should conform to RFC1035. + This corresponds to the ``instance_group_manager`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - region_instance_group_managers_set_target_pools_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagersSetTargetPoolsRequest): + region_instance_group_manager_update_instance_config_req_resource (google.cloud.compute_v1.types.RegionInstanceGroupManagerUpdateInstanceConfigReq): The body resource for this request - This corresponds to the ``region_instance_group_managers_set_target_pools_request_resource`` field + This corresponds to the ``region_instance_group_manager_update_instance_config_req_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -2502,22 +4279,9 @@ def set_target_pools_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2528,7 +4292,7 @@ def set_target_pools_unary( project, region, instance_group_manager, - region_instance_group_managers_set_target_pools_request_resource, + region_instance_group_manager_update_instance_config_req_resource, ] ) if request is not None and has_flattened_params: @@ -2538,13 +4302,15 @@ def set_target_pools_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetTargetPoolsRegionInstanceGroupManagerRequest. + # in a compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.SetTargetPoolsRegionInstanceGroupManagerRequest + request, compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest ): - request = compute.SetTargetPoolsRegionInstanceGroupManagerRequest(request) + request = compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -2554,16 +4320,18 @@ def set_target_pools_unary( if instance_group_manager is not None: request.instance_group_manager = instance_group_manager if ( - region_instance_group_managers_set_target_pools_request_resource + region_instance_group_manager_update_instance_config_req_resource is not None ): - request.region_instance_group_managers_set_target_pools_request_resource = ( - region_instance_group_managers_set_target_pools_request_resource + request.region_instance_group_manager_update_instance_config_req_resource = ( + region_instance_group_manager_update_instance_config_req_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_target_pools] + rpc = self._transport._wrapped_methods[ + self._transport.update_per_instance_configs + ] # Send the request. response = rpc( @@ -2576,7 +4344,7 @@ def set_target_pools_unary( # Done; return the response. return response - def update_per_instance_configs_unary( + def update_per_instance_configs( self, request: Union[ compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest, dict @@ -2589,7 +4357,7 @@ def update_per_instance_configs_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Inserts or updates per-instance configs for the managed instance group. perInstanceConfig.name serves as a key used to distinguish whether to perform insert or @@ -2631,22 +4399,9 @@ def update_per_instance_configs_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -2706,6 +4461,31 @@ def update_per_instance_configs_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_instance_group_managers/transports/base.py b/google/cloud/compute_v1/services/region_instance_group_managers/transports/base.py index 9fc17b64f..5f803d6c8 100644 --- a/google/cloud/compute_v1/services/region_instance_group_managers/transports/base.py +++ b/google/cloud/compute_v1/services/region_instance_group_managers/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -412,5 +415,21 @@ def update_per_instance_configs( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionInstanceGroupManagersTransport",) diff --git a/google/cloud/compute_v1/services/region_instance_group_managers/transports/rest.py b/google/cloud/compute_v1/services/region_instance_group_managers/transports/rest.py index 95cf03d60..1b340c7c1 100644 --- a/google/cloud/compute_v1/services/region_instance_group_managers/transports/rest.py +++ b/google/cloud/compute_v1/services/region_instance_group_managers/transports/rest.py @@ -3193,6 +3193,10 @@ def update_per_instance_configs( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_instance_groups/client.py b/google/cloud/compute_v1/services/region_instance_groups/client.py index 1f16f7060..7e3af5537 100644 --- a/google/cloud/compute_v1/services/region_instance_groups/client.py +++ b/google/cloud/compute_v1/services/region_instance_groups/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_instance_groups import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionInstanceGroupsTransport, DEFAULT_CLIENT_INFO @@ -766,22 +769,9 @@ def set_named_ports_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -835,6 +825,138 @@ def set_named_ports_unary( # Done; return the response. return response + def set_named_ports( + self, + request: Union[compute.SetNamedPortsRegionInstanceGroupRequest, dict] = None, + *, + project: str = None, + region: str = None, + instance_group: str = None, + region_instance_groups_set_named_ports_request_resource: compute.RegionInstanceGroupsSetNamedPortsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the named ports for the specified regional + instance group. + + Args: + request (Union[google.cloud.compute_v1.types.SetNamedPortsRegionInstanceGroupRequest, dict]): + The request object. A request message for + RegionInstanceGroups.SetNamedPorts. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_group (str): + The name of the regional instance + group where the named ports are updated. + + This corresponds to the ``instance_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_instance_groups_set_named_ports_request_resource (google.cloud.compute_v1.types.RegionInstanceGroupsSetNamedPortsRequest): + The body resource for this request + This corresponds to the ``region_instance_groups_set_named_ports_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + instance_group, + region_instance_groups_set_named_ports_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetNamedPortsRegionInstanceGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetNamedPortsRegionInstanceGroupRequest): + request = compute.SetNamedPortsRegionInstanceGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if instance_group is not None: + request.instance_group = instance_group + if region_instance_groups_set_named_ports_request_resource is not None: + request.region_instance_groups_set_named_ports_request_resource = ( + region_instance_groups_set_named_ports_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_named_ports] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_instance_groups/transports/base.py b/google/cloud/compute_v1/services/region_instance_groups/transports/base.py index f662225cf..09f64a5f4 100644 --- a/google/cloud/compute_v1/services/region_instance_groups/transports/base.py +++ b/google/cloud/compute_v1/services/region_instance_groups/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -195,5 +198,21 @@ def set_named_ports( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionInstanceGroupsTransport",) diff --git a/google/cloud/compute_v1/services/region_instance_groups/transports/rest.py b/google/cloud/compute_v1/services/region_instance_groups/transports/rest.py index c09fe53a2..ba0246dc0 100644 --- a/google/cloud/compute_v1/services/region_instance_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/region_instance_groups/transports/rest.py @@ -762,6 +762,10 @@ def set_named_ports( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_instances/client.py b/google/cloud/compute_v1/services/region_instances/client.py index 2d9aafca7..8c186bb5f 100644 --- a/google/cloud/compute_v1/services/region_instances/client.py +++ b/google/cloud/compute_v1/services/region_instances/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.types import compute from .transports.base import RegionInstancesTransport, DEFAULT_CLIENT_INFO from .transports.rest import RegionInstancesRestTransport @@ -444,22 +447,9 @@ def bulk_insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -506,6 +496,123 @@ def bulk_insert_unary( # Done; return the response. return response + def bulk_insert( + self, + request: Union[compute.BulkInsertRegionInstanceRequest, dict] = None, + *, + project: str = None, + region: str = None, + bulk_insert_instance_resource_resource: compute.BulkInsertInstanceResource = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates multiple instances in a given region. Count + specifies the number of instances to create. + + Args: + request (Union[google.cloud.compute_v1.types.BulkInsertRegionInstanceRequest, dict]): + The request object. A request message for + RegionInstances.BulkInsert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region for this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + bulk_insert_instance_resource_resource (google.cloud.compute_v1.types.BulkInsertInstanceResource): + The body resource for this request + This corresponds to the ``bulk_insert_instance_resource_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, bulk_insert_instance_resource_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.BulkInsertRegionInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.BulkInsertRegionInstanceRequest): + request = compute.BulkInsertRegionInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if bulk_insert_instance_resource_resource is not None: + request.bulk_insert_instance_resource_resource = ( + bulk_insert_instance_resource_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.bulk_insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_instances/transports/base.py b/google/cloud/compute_v1/services/region_instances/transports/base.py index 03b8a6229..adfcd3fd3 100644 --- a/google/cloud/compute_v1/services/region_instances/transports/base.py +++ b/google/cloud/compute_v1/services/region_instances/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -148,5 +151,21 @@ def bulk_insert( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionInstancesTransport",) diff --git a/google/cloud/compute_v1/services/region_instances/transports/rest.py b/google/cloud/compute_v1/services/region_instances/transports/rest.py index c9a7ca2c7..19eda7df6 100644 --- a/google/cloud/compute_v1/services/region_instances/transports/rest.py +++ b/google/cloud/compute_v1/services/region_instances/transports/rest.py @@ -324,6 +324,10 @@ def bulk_insert( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_network_endpoint_groups/client.py b/google/cloud/compute_v1/services/region_network_endpoint_groups/client.py index 558018ce6..0af33692d 100644 --- a/google/cloud/compute_v1/services/region_network_endpoint_groups/client.py +++ b/google/cloud/compute_v1/services/region_network_endpoint_groups/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_network_endpoint_groups import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionNetworkEndpointGroupsTransport, DEFAULT_CLIENT_INFO @@ -452,22 +455,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -510,6 +500,124 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionNetworkEndpointGroupRequest, dict] = None, + *, + project: str = None, + region: str = None, + network_endpoint_group: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified network endpoint group. Note + that the NEG cannot be deleted if it is configured as a + backend of a backend service. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionNetworkEndpointGroupRequest, dict]): + The request object. A request message for + RegionNetworkEndpointGroups.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region where the + network endpoint group is located. It + should comply with RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group (str): + The name of the network endpoint + group to delete. It should comply with + RFC1035. + + This corresponds to the ``network_endpoint_group`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, network_endpoint_group]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionNetworkEndpointGroupRequest): + request = compute.DeleteRegionNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if network_endpoint_group is not None: + request.network_endpoint_group = network_endpoint_group + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionNetworkEndpointGroupRequest, dict] = None, @@ -656,22 +764,101 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, network_endpoint_group_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionNetworkEndpointGroupRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionNetworkEndpointGroupRequest): + request = compute.InsertRegionNetworkEndpointGroupRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if network_endpoint_group_resource is not None: + request.network_endpoint_group_resource = ( + network_endpoint_group_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionNetworkEndpointGroupRequest, dict] = None, + *, + project: str = None, + region: str = None, + network_endpoint_group_resource: compute.NetworkEndpointGroup = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a network endpoint group in the specified + project using the parameters that are included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionNetworkEndpointGroupRequest, dict]): + The request object. A request message for + RegionNetworkEndpointGroups.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region where you want + to create the network endpoint group. It + should comply with RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network_endpoint_group_resource (google.cloud.compute_v1.types.NetworkEndpointGroup): + The body resource for this request + This corresponds to the ``network_endpoint_group_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -713,6 +900,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/base.py b/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/base.py index 90ce19ec3..0c0455105 100644 --- a/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/base.py +++ b/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -193,5 +196,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionNetworkEndpointGroupsTransport",) diff --git a/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/rest.py b/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/rest.py index f69d72d42..dff0dcc32 100644 --- a/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/region_network_endpoint_groups/transports/rest.py @@ -766,6 +766,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_network_firewall_policies/client.py b/google/cloud/compute_v1/services/region_network_firewall_policies/client.py index 479d617e1..c23a0512f 100644 --- a/google/cloud/compute_v1/services/region_network_firewall_policies/client.py +++ b/google/cloud/compute_v1/services/region_network_firewall_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_network_firewall_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionNetworkFirewallPoliciesTransport, DEFAULT_CLIENT_INFO @@ -457,22 +460,9 @@ def add_association_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -523,25 +513,28 @@ def add_association_unary( # Done; return the response. return response - def add_rule_unary( + def add_association( self, - request: Union[compute.AddRuleRegionNetworkFirewallPolicyRequest, dict] = None, + request: Union[ + compute.AddAssociationRegionNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, region: str = None, firewall_policy: str = None, - firewall_policy_rule_resource: compute.FirewallPolicyRule = None, + firewall_policy_association_resource: compute.FirewallPolicyAssociation = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Inserts a rule into a network firewall policy. + ) -> extended_operation.ExtendedOperation: + r"""Inserts an association for the specified network + firewall policy. Args: - request (Union[google.cloud.compute_v1.types.AddRuleRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddAssociationRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.AddRule. See the method - description for details. + RegionNetworkFirewallPolicies.AddAssociation. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -561,9 +554,9 @@ def add_rule_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + firewall_policy_association_resource (google.cloud.compute_v1.types.FirewallPolicyAssociation): The body resource for this request - This corresponds to the ``firewall_policy_rule_resource`` field + This corresponds to the ``firewall_policy_association_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -573,29 +566,16 @@ def add_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, region, firewall_policy, firewall_policy_rule_resource] + [project, region, firewall_policy, firewall_policy_association_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -604,11 +584,13 @@ def add_rule_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.AddRuleRegionNetworkFirewallPolicyRequest. + # in a compute.AddAssociationRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.AddRuleRegionNetworkFirewallPolicyRequest): - request = compute.AddRuleRegionNetworkFirewallPolicyRequest(request) + if not isinstance( + request, compute.AddAssociationRegionNetworkFirewallPolicyRequest + ): + request = compute.AddAssociationRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -617,12 +599,14 @@ def add_rule_unary( request.region = region if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_rule_resource is not None: - request.firewall_policy_rule_resource = firewall_policy_rule_resource + if firewall_policy_association_resource is not None: + request.firewall_policy_association_resource = ( + firewall_policy_association_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.add_rule] + rpc = self._transport._wrapped_methods[self._transport.add_association] # Send the request. response = rpc( @@ -632,29 +616,52 @@ def add_rule_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def clone_rules_unary( + def add_rule_unary( self, - request: Union[ - compute.CloneRulesRegionNetworkFirewallPolicyRequest, dict - ] = None, + request: Union[compute.AddRuleRegionNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, region: str = None, firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Copies rules to the specified network firewall - policy. + r"""Inserts a rule into a network firewall policy. Args: - request (Union[google.cloud.compute_v1.types.CloneRulesRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddRuleRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.CloneRules. See the method + RegionNetworkFirewallPolicies.AddRule. See the method description for details. project (str): Project ID for this request. @@ -675,6 +682,11 @@ def clone_rules_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -682,28 +694,17 @@ def clone_rules_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, firewall_policy]) + has_flattened_params = any( + [project, region, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -711,13 +712,11 @@ def clone_rules_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.CloneRulesRegionNetworkFirewallPolicyRequest. + # in a compute.AddRuleRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.CloneRulesRegionNetworkFirewallPolicyRequest - ): - request = compute.CloneRulesRegionNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.AddRuleRegionNetworkFirewallPolicyRequest): + request = compute.AddRuleRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -726,10 +725,12 @@ def clone_rules_unary( request.region = region if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.clone_rules] + rpc = self._transport._wrapped_methods[self._transport.add_rule] # Send the request. response = rpc( @@ -742,23 +743,24 @@ def clone_rules_unary( # Done; return the response. return response - def delete_unary( + def add_rule( self, - request: Union[compute.DeleteRegionNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.AddRuleRegionNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, region: str = None, firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Deletes the specified network firewall policy. + ) -> extended_operation.ExtendedOperation: + r"""Inserts a rule into a network firewall policy. Args: - request (Union[google.cloud.compute_v1.types.DeleteRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.AddRuleRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.Delete. See the method + RegionNetworkFirewallPolicies.AddRule. See the method description for details. project (str): Project ID for this request. @@ -774,11 +776,16 @@ def delete_unary( should not be set. firewall_policy (str): Name of the firewall policy to - delete. + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -786,28 +793,17 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, firewall_policy]) + has_flattened_params = any( + [project, region, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -815,11 +811,11 @@ def delete_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.DeleteRegionNetworkFirewallPolicyRequest. + # in a compute.AddRuleRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.DeleteRegionNetworkFirewallPolicyRequest): - request = compute.DeleteRegionNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.AddRuleRegionNetworkFirewallPolicyRequest): + request = compute.AddRuleRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -828,10 +824,12 @@ def delete_unary( request.region = region if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete] + rpc = self._transport._wrapped_methods[self._transport.add_rule] # Send the request. response = rpc( @@ -841,12 +839,39 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get( + def clone_rules_unary( self, - request: Union[compute.GetRegionNetworkFirewallPolicyRequest, dict] = None, + request: Union[ + compute.CloneRulesRegionNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, region: str = None, @@ -854,13 +879,14 @@ def get( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicy: - r"""Returns the specified network firewall policy. + ) -> compute.Operation: + r"""Copies rules to the specified network firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.GetRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.CloneRulesRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.Get. See the method + RegionNetworkFirewallPolicies.CloneRules. See the method description for details. project (str): Project ID for this request. @@ -875,7 +901,9 @@ def get( on the ``request`` instance; if ``request`` is provided, this should not be set. firewall_policy (str): - Name of the firewall policy to get. + Name of the firewall policy to + update. + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. @@ -886,9 +914,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicy: - Represents a Firewall Policy - resource. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -902,11 +930,13 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetRegionNetworkFirewallPolicyRequest. + # in a compute.CloneRulesRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetRegionNetworkFirewallPolicyRequest): - request = compute.GetRegionNetworkFirewallPolicyRequest(request) + if not isinstance( + request, compute.CloneRulesRegionNetworkFirewallPolicyRequest + ): + request = compute.CloneRulesRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -918,7 +948,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.clone_rules] # Send the request. response = rpc( @@ -931,10 +961,10 @@ def get( # Done; return the response. return response - def get_association( + def clone_rules( self, request: Union[ - compute.GetAssociationRegionNetworkFirewallPolicyRequest, dict + compute.CloneRulesRegionNetworkFirewallPolicyRequest, dict ] = None, *, project: str = None, @@ -943,14 +973,15 @@ def get_association( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicyAssociation: - r"""Gets an association with the specified name. + ) -> extended_operation.ExtendedOperation: + r"""Copies rules to the specified network firewall + policy. Args: - request (Union[google.cloud.compute_v1.types.GetAssociationRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.CloneRulesRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.GetAssociation. See the - method description for details. + RegionNetworkFirewallPolicies.CloneRules. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -964,8 +995,8 @@ def get_association( on the ``request`` instance; if ``request`` is provided, this should not be set. firewall_policy (str): - Name of the firewall policy to which - the queried association belongs. + Name of the firewall policy to + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this @@ -977,7 +1008,9 @@ def get_association( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicyAssociation: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -991,13 +1024,13 @@ def get_association( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetAssociationRegionNetworkFirewallPolicyRequest. + # in a compute.CloneRulesRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.GetAssociationRegionNetworkFirewallPolicyRequest + request, compute.CloneRulesRegionNetworkFirewallPolicyRequest ): - request = compute.GetAssociationRegionNetworkFirewallPolicyRequest(request) + request = compute.CloneRulesRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1009,7 +1042,7 @@ def get_association( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_association] + rpc = self._transport._wrapped_methods[self._transport.clone_rules] # Send the request. response = rpc( @@ -1019,29 +1052,52 @@ def get_association( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_effective_firewalls( + def delete_unary( self, - request: Union[ - compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, dict - ] = None, + request: Union[compute.DeleteRegionNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, region: str = None, - network: str = None, + firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse: - r"""Returns the effective firewalls on a given network. + ) -> compute.Operation: + r"""Deletes the specified network firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.GetEffectiveFirewalls. See - the method description for details. + RegionNetworkFirewallPolicies.Delete. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1054,9 +1110,11 @@ def get_effective_firewalls( This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - network (str): - Network reference - This corresponds to the ``network`` field + firewall_policy (str): + Name of the firewall policy to + delete. + + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1066,13 +1124,15 @@ def get_effective_firewalls( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, network]) + has_flattened_params = any([project, region, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1080,27 +1140,23 @@ def get_effective_firewalls( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest. + # in a compute.DeleteRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance( - request, compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest - ): - request = compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest( - request - ) + if not isinstance(request, compute.DeleteRegionNetworkFirewallPolicyRequest): + request = compute.DeleteRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if network is not None: - request.network = network + if firewall_policy is not None: + request.firewall_policy = firewall_policy # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_effective_firewalls] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -1113,44 +1169,41 @@ def get_effective_firewalls( # Done; return the response. return response - def get_iam_policy( + def delete( self, - request: Union[ - compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, dict - ] = None, + request: Union[compute.DeleteRegionNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, region: str = None, - resource: str = None, + firewall_policy: str = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Policy: - r"""Gets the access control policy for a resource. May be - empty if no such policy or resource exists. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified network firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetIamPolicyRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.GetIamPolicy. See the - method description for details. + RegionNetworkFirewallPolicies.Delete. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - The name of the region for this + Name of the region scoping this request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - resource (str): - Name or id of the resource for this - request. + firewall_policy (str): + Name of the firewall policy to + delete. - This corresponds to the ``resource`` field + This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1160,53 +1213,15 @@ def get_iam_policy( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. A - Policy is a collection of bindings. A binding binds one - or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role is - a named list of permissions; each role can be an IAM - predefined role or a user-created custom role. For some - types of Google Cloud resources, a binding can also - specify a condition, which is a logical expression that - allows access to a resource only if the expression - evaluates to true. A condition can add constraints based - on attributes of the request, the resource, or both. To - learn which resources support conditions in their IAM - policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - **JSON example:** { "bindings": [ { "role": - "roles/resourcemanager.organizationAdmin", "members": [ - "user:mike@example.com", "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] }, { "role": - "roles/resourcemanager.organizationViewer", "members": [ - "user:eve@example.com" ], "condition": { "title": - "expirable access", "description": "Does not grant - access after Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": - "BwWWja0YfJA=", "version": 3 } **YAML example:** - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - members: - - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer condition: - title: expirable access description: Does not grant - access after Sep 2020 expression: request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, - see the [IAM - documentation](\ https://cloud.google.com/iam/docs/). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, resource]) + has_flattened_params = any([project, region, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1214,25 +1229,931 @@ def get_iam_policy( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetIamPolicyRegionNetworkFirewallPolicyRequest. + # in a compute.DeleteRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionNetworkFirewallPolicyRequest): + request = compute.DeleteRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def get( + self, + request: Union[compute.GetRegionNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicy: + r"""Returns the specified network firewall policy. + + Args: + request (Union[google.cloud.compute_v1.types.GetRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.Get. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to get. + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicy: + Represents a Firewall Policy + resource. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRegionNetworkFirewallPolicyRequest): + request = compute.GetRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_association( + self, + request: Union[ + compute.GetAssociationRegionNetworkFirewallPolicyRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicyAssociation: + r"""Gets an association with the specified name. + + Args: + request (Union[google.cloud.compute_v1.types.GetAssociationRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.GetAssociation. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to which + the queried association belongs. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicyAssociation: + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetAssociationRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.GetIamPolicyRegionNetworkFirewallPolicyRequest + request, compute.GetAssociationRegionNetworkFirewallPolicyRequest ): - request = compute.GetIamPolicyRegionNetworkFirewallPolicyRequest(request) + request = compute.GetAssociationRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if resource is not None: - request.resource = resource + if firewall_policy is not None: + request.firewall_policy = firewall_policy # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + rpc = self._transport._wrapped_methods[self._transport.get_association] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_effective_firewalls( + self, + request: Union[ + compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + network: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse: + r"""Returns the effective firewalls on a given network. + + Args: + request (Union[google.cloud.compute_v1.types.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.GetEffectiveFirewalls. See + the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + network (str): + Network reference + This corresponds to the ``network`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse: + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, network]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest + ): + request = compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if network is not None: + request.network = network + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_effective_firewalls] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy( + self, + request: Union[ + compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + resource: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Gets the access control policy for a resource. May be + empty if no such policy or resource exists. + + Args: + request (Union[google.cloud.compute_v1.types.GetIamPolicyRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.GetIamPolicy. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The name of the region for this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. A + Policy is a collection of bindings. A binding binds one + or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role is + a named list of permissions; each role can be an IAM + predefined role or a user-created custom role. For some + types of Google Cloud resources, a binding can also + specify a condition, which is a logical expression that + allows access to a resource only if the expression + evaluates to true. A condition can add constraints based + on attributes of the request, the resource, or both. To + learn which resources support conditions in their IAM + policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + **JSON example:** { "bindings": [ { "role": + "roles/resourcemanager.organizationAdmin", "members": [ + "user:mike@example.com", "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] }, { "role": + "roles/resourcemanager.organizationViewer", "members": [ + "user:eve@example.com" ], "condition": { "title": + "expirable access", "description": "Does not grant + access after Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } ], "etag": + "BwWWja0YfJA=", "version": 3 } **YAML example:** + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - members: + - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer condition: + title: expirable access description: Does not grant + access after Sep 2020 expression: request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: BwWWja0YfJA= + version: 3 For a description of IAM and its features, + see the [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetIamPolicyRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.GetIamPolicyRegionNetworkFirewallPolicyRequest + ): + request = compute.GetIamPolicyRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_rule( + self, + request: Union[compute.GetRuleRegionNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + firewall_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.FirewallPolicyRule: + r"""Gets a rule of the specified priority. + + Args: + request (Union[google.cloud.compute_v1.types.GetRuleRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.GetRule. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to which + the queried rule belongs. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.FirewallPolicyRule: + Represents a rule that describes one + or more match conditions along with the + action to be taken when traffic matches + this condition (allow or deny). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, firewall_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetRuleRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRuleRegionNetworkFirewallPolicyRequest): + request = compute.GetRuleRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if firewall_policy is not None: + request.firewall_policy = firewall_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_rule] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertRegionNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a new network firewall policy in the + specified project and region. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionNetworkFirewallPolicyRequest): + request = compute.InsertRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new network firewall policy in the + specified project and region. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, firewall_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionNetworkFirewallPolicyRequest): + request = compute.InsertRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListRegionNetworkFirewallPoliciesRequest, dict] = None, + *, + project: str = None, + region: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Lists all the network firewall policies that have + been configured for the specified project in the given + region. + + Args: + request (Union[google.cloud.compute_v1.types.ListRegionNetworkFirewallPoliciesRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.List. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.region_network_firewall_policies.pagers.ListPager: + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListRegionNetworkFirewallPoliciesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListRegionNetworkFirewallPoliciesRequest): + request = compute.ListRegionNetworkFirewallPoliciesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchRegionNetworkFirewallPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + firewall_policy: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Patches the specified network firewall policy. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionNetworkFirewallPolicyRequest, dict]): + The request object. A request message for + RegionNetworkFirewallPolicies.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, firewall_policy, firewall_policy_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionNetworkFirewallPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionNetworkFirewallPolicyRequest): + request = compute.PatchRegionNetworkFirewallPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1245,23 +2166,24 @@ def get_iam_policy( # Done; return the response. return response - def get_rule( + def patch( self, - request: Union[compute.GetRuleRegionNetworkFirewallPolicyRequest, dict] = None, + request: Union[compute.PatchRegionNetworkFirewallPolicyRequest, dict] = None, *, project: str = None, region: str = None, firewall_policy: str = None, + firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.FirewallPolicyRule: - r"""Gets a rule of the specified priority. + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified network firewall policy. Args: - request (Union[google.cloud.compute_v1.types.GetRuleRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.GetRule. See the method + RegionNetworkFirewallPolicies.Patch. See the method description for details. project (str): Project ID for this request. @@ -1276,12 +2198,17 @@ def get_rule( on the ``request`` instance; if ``request`` is provided, this should not be set. firewall_policy (str): - Name of the firewall policy to which - the queried rule belongs. + Name of the firewall policy to + update. This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + The body resource for this request + This corresponds to the ``firewall_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1289,17 +2216,17 @@ def get_rule( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.FirewallPolicyRule: - Represents a rule that describes one - or more match conditions along with the - action to be taken when traffic matches - this condition (allow or deny). + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, firewall_policy]) + has_flattened_params = any( + [project, region, firewall_policy, firewall_policy_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1307,11 +2234,11 @@ def get_rule( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetRuleRegionNetworkFirewallPolicyRequest. + # in a compute.PatchRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetRuleRegionNetworkFirewallPolicyRequest): - request = compute.GetRuleRegionNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchRegionNetworkFirewallPolicyRequest): + request = compute.PatchRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1320,10 +2247,12 @@ def get_rule( request.region = region if firewall_policy is not None: request.firewall_policy = firewall_policy + if firewall_policy_resource is not None: + request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_rule] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1333,27 +2262,54 @@ def get_rule( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def insert_unary( + def patch_rule_unary( self, - request: Union[compute.InsertRegionNetworkFirewallPolicyRequest, dict] = None, + request: Union[ + compute.PatchRuleRegionNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, region: str = None, - firewall_policy_resource: compute.FirewallPolicy = None, + firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Creates a new network firewall policy in the - specified project and region. + r"""Patches a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.InsertRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRuleRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.Insert. See the method + RegionNetworkFirewallPolicies.PatchRule. See the method description for details. project (str): Project ID for this request. @@ -1367,9 +2323,16 @@ def insert_unary( This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): The body resource for this request - This corresponds to the ``firewall_policy_resource`` field + This corresponds to the ``firewall_policy_rule_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1379,28 +2342,17 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, firewall_policy_resource]) + has_flattened_params = any( + [project, region, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1408,23 +2360,25 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertRegionNetworkFirewallPolicyRequest. + # in a compute.PatchRuleRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertRegionNetworkFirewallPolicyRequest): - request = compute.InsertRegionNetworkFirewallPolicyRequest(request) + if not isinstance(request, compute.PatchRuleRegionNetworkFirewallPolicyRequest): + request = compute.PatchRuleRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if firewall_policy_resource is not None: - request.firewall_policy_resource = firewall_policy_resource + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.patch_rule] # Send the request. response = rpc( @@ -1437,24 +2391,26 @@ def insert_unary( # Done; return the response. return response - def list( + def patch_rule( self, - request: Union[compute.ListRegionNetworkFirewallPoliciesRequest, dict] = None, + request: Union[ + compute.PatchRuleRegionNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, region: str = None, + firewall_policy: str = None, + firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Lists all the network firewall policies that have - been configured for the specified project in the given - region. + ) -> extended_operation.ExtendedOperation: + r"""Patches a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.ListRegionNetworkFirewallPoliciesRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchRuleRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.List. See the method + RegionNetworkFirewallPolicies.PatchRule. See the method description for details. project (str): Project ID for this request. @@ -1468,6 +2424,18 @@ def list( This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + firewall_policy (str): + Name of the firewall policy to + update. + + This corresponds to the ``firewall_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): + The body resource for this request + This corresponds to the ``firewall_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1475,16 +2443,17 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.region_network_firewall_policies.pagers.ListPager: - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region]) + has_flattened_params = any( + [project, region, firewall_policy, firewall_policy_rule_resource] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1492,21 +2461,25 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListRegionNetworkFirewallPoliciesRequest. + # in a compute.PatchRuleRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListRegionNetworkFirewallPoliciesRequest): - request = compute.ListRegionNetworkFirewallPoliciesRequest(request) + if not isinstance(request, compute.PatchRuleRegionNetworkFirewallPolicyRequest): + request = compute.PatchRuleRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region + if firewall_policy is not None: + request.firewall_policy = firewall_policy + if firewall_policy_rule_resource is not None: + request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.patch_rule] # Send the request. response = rpc( @@ -1516,37 +2489,55 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) # Done; return the response. return response - def patch_unary( + def remove_association_unary( self, - request: Union[compute.PatchRegionNetworkFirewallPolicyRequest, dict] = None, + request: Union[ + compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict + ] = None, *, project: str = None, region: str = None, firewall_policy: str = None, - firewall_policy_resource: compute.FirewallPolicy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Patches the specified network firewall policy. + r"""Removes an association for the specified network + firewall policy. Args: - request (Union[google.cloud.compute_v1.types.PatchRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.Patch. See the method - description for details. + RegionNetworkFirewallPolicies.RemoveAssociation. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1566,11 +2557,6 @@ def patch_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_resource (google.cloud.compute_v1.types.FirewallPolicy): - The body resource for this request - This corresponds to the ``firewall_policy_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1578,30 +2564,15 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, region, firewall_policy, firewall_policy_resource] - ) + has_flattened_params = any([project, region, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1609,11 +2580,15 @@ def patch_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchRegionNetworkFirewallPolicyRequest. + # in a compute.RemoveAssociationRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchRegionNetworkFirewallPolicyRequest): - request = compute.PatchRegionNetworkFirewallPolicyRequest(request) + if not isinstance( + request, compute.RemoveAssociationRegionNetworkFirewallPolicyRequest + ): + request = compute.RemoveAssociationRegionNetworkFirewallPolicyRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1622,12 +2597,10 @@ def patch_unary( request.region = region if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_resource is not None: - request.firewall_policy_resource = firewall_policy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch] + rpc = self._transport._wrapped_methods[self._transport.remove_association] # Send the request. response = rpc( @@ -1640,27 +2613,27 @@ def patch_unary( # Done; return the response. return response - def patch_rule_unary( + def remove_association( self, request: Union[ - compute.PatchRuleRegionNetworkFirewallPolicyRequest, dict + compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict ] = None, *, project: str = None, region: str = None, firewall_policy: str = None, - firewall_policy_rule_resource: compute.FirewallPolicyRule = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Patches a rule of the specified priority. + ) -> extended_operation.ExtendedOperation: + r"""Removes an association for the specified network + firewall policy. Args: - request (Union[google.cloud.compute_v1.types.PatchRuleRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.PatchRule. See the method - description for details. + RegionNetworkFirewallPolicies.RemoveAssociation. See the + method description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1680,11 +2653,6 @@ def patch_rule_unary( This corresponds to the ``firewall_policy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - firewall_policy_rule_resource (google.cloud.compute_v1.types.FirewallPolicyRule): - The body resource for this request - This corresponds to the ``firewall_policy_rule_resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1692,30 +2660,15 @@ def patch_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any( - [project, region, firewall_policy, firewall_policy_rule_resource] - ) + has_flattened_params = any([project, region, firewall_policy]) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1723,11 +2676,15 @@ def patch_rule_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.PatchRuleRegionNetworkFirewallPolicyRequest. + # in a compute.RemoveAssociationRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.PatchRuleRegionNetworkFirewallPolicyRequest): - request = compute.PatchRuleRegionNetworkFirewallPolicyRequest(request) + if not isinstance( + request, compute.RemoveAssociationRegionNetworkFirewallPolicyRequest + ): + request = compute.RemoveAssociationRegionNetworkFirewallPolicyRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1736,12 +2693,10 @@ def patch_rule_unary( request.region = region if firewall_policy is not None: request.firewall_policy = firewall_policy - if firewall_policy_rule_resource is not None: - request.firewall_policy_rule_resource = firewall_policy_rule_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.patch_rule] + rpc = self._transport._wrapped_methods[self._transport.remove_association] # Send the request. response = rpc( @@ -1751,13 +2706,38 @@ def patch_rule_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def remove_association_unary( + def remove_rule_unary( self, request: Union[ - compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict + compute.RemoveRuleRegionNetworkFirewallPolicyRequest, dict ] = None, *, project: str = None, @@ -1767,14 +2747,13 @@ def remove_association_unary( timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes an association for the specified network - firewall policy. + r"""Deletes a rule of the specified priority. Args: - request (Union[google.cloud.compute_v1.types.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveRuleRegionNetworkFirewallPolicyRequest, dict]): The request object. A request message for - RegionNetworkFirewallPolicies.RemoveAssociation. See the - method description for details. + RegionNetworkFirewallPolicies.RemoveRule. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1801,22 +2780,9 @@ def remove_association_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1830,15 +2796,13 @@ def remove_association_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveAssociationRegionNetworkFirewallPolicyRequest. + # in a compute.RemoveRuleRegionNetworkFirewallPolicyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, compute.RemoveAssociationRegionNetworkFirewallPolicyRequest + request, compute.RemoveRuleRegionNetworkFirewallPolicyRequest ): - request = compute.RemoveAssociationRegionNetworkFirewallPolicyRequest( - request - ) + request = compute.RemoveRuleRegionNetworkFirewallPolicyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1850,7 +2814,7 @@ def remove_association_unary( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_association] + rpc = self._transport._wrapped_methods[self._transport.remove_rule] # Send the request. response = rpc( @@ -1863,7 +2827,7 @@ def remove_association_unary( # Done; return the response. return response - def remove_rule_unary( + def remove_rule( self, request: Union[ compute.RemoveRuleRegionNetworkFirewallPolicyRequest, dict @@ -1875,7 +2839,7 @@ def remove_rule_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Deletes a rule of the specified priority. Args: @@ -1909,22 +2873,9 @@ def remove_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1966,6 +2917,31 @@ def remove_rule_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_network_firewall_policies/transports/base.py b/google/cloud/compute_v1/services/region_network_firewall_policies/transports/base.py index c6f22d6f6..50d78fcf6 100644 --- a/google/cloud/compute_v1/services/region_network_firewall_policies/transports/base.py +++ b/google/cloud/compute_v1/services/region_network_firewall_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -382,5 +385,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionNetworkFirewallPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/region_network_firewall_policies/transports/rest.py b/google/cloud/compute_v1/services/region_network_firewall_policies/transports/rest.py index c7846c043..03fbb1bb8 100644 --- a/google/cloud/compute_v1/services/region_network_firewall_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/region_network_firewall_policies/transports/rest.py @@ -2819,6 +2819,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_notification_endpoints/client.py b/google/cloud/compute_v1/services/region_notification_endpoints/client.py index 4092e1de8..f718e53fe 100644 --- a/google/cloud/compute_v1/services/region_notification_endpoints/client.py +++ b/google/cloud/compute_v1/services/region_notification_endpoints/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_notification_endpoints import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionNotificationEndpointsTransport, DEFAULT_CLIENT_INFO @@ -449,22 +452,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -507,6 +497,121 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionNotificationEndpointRequest, dict] = None, + *, + project: str = None, + region: str = None, + notification_endpoint: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified NotificationEndpoint in the + given region + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionNotificationEndpointRequest, dict]): + The request object. A request message for + RegionNotificationEndpoints.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + notification_endpoint (str): + Name of the NotificationEndpoint + resource to delete. + + This corresponds to the ``notification_endpoint`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, notification_endpoint]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionNotificationEndpointRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionNotificationEndpointRequest): + request = compute.DeleteRegionNotificationEndpointRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if notification_endpoint is not None: + request.notification_endpoint = notification_endpoint + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionNotificationEndpointRequest, dict] = None, @@ -646,22 +751,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -704,6 +796,120 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionNotificationEndpointRequest, dict] = None, + *, + project: str = None, + region: str = None, + notification_endpoint_resource: compute.NotificationEndpoint = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Create a NotificationEndpoint in the specified + project in the given region using the parameters that + are included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionNotificationEndpointRequest, dict]): + The request object. A request message for + RegionNotificationEndpoints.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + notification_endpoint_resource (google.cloud.compute_v1.types.NotificationEndpoint): + The body resource for this request + This corresponds to the ``notification_endpoint_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, notification_endpoint_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionNotificationEndpointRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionNotificationEndpointRequest): + request = compute.InsertRegionNotificationEndpointRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if notification_endpoint_resource is not None: + request.notification_endpoint_resource = notification_endpoint_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionNotificationEndpointsRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/region_notification_endpoints/transports/base.py b/google/cloud/compute_v1/services/region_notification_endpoints/transports/base.py index 02db60bd4..270a4e4d2 100644 --- a/google/cloud/compute_v1/services/region_notification_endpoints/transports/base.py +++ b/google/cloud/compute_v1/services/region_notification_endpoints/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -193,5 +196,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionNotificationEndpointsTransport",) diff --git a/google/cloud/compute_v1/services/region_notification_endpoints/transports/rest.py b/google/cloud/compute_v1/services/region_notification_endpoints/transports/rest.py index 81d6c49e2..4f33b6285 100644 --- a/google/cloud/compute_v1/services/region_notification_endpoints/transports/rest.py +++ b/google/cloud/compute_v1/services/region_notification_endpoints/transports/rest.py @@ -762,6 +762,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_operations/client.py b/google/cloud/compute_v1/services/region_operations/client.py index 4e4e8e48b..e24167d1f 100644 --- a/google/cloud/compute_v1/services/region_operations/client.py +++ b/google/cloud/compute_v1/services/region_operations/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/region_operations/transports/base.py b/google/cloud/compute_v1/services/region_operations/transports/base.py index eac98d922..28d578dad 100644 --- a/google/cloud/compute_v1/services/region_operations/transports/base.py +++ b/google/cloud/compute_v1/services/region_operations/transports/base.py @@ -83,6 +83,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -193,5 +194,9 @@ def wait( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("RegionOperationsTransport",) diff --git a/google/cloud/compute_v1/services/region_operations/transports/rest.py b/google/cloud/compute_v1/services/region_operations/transports/rest.py index 2d5c83702..64d6f9452 100644 --- a/google/cloud/compute_v1/services/region_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/region_operations/transports/rest.py @@ -729,6 +729,10 @@ def wait(self) -> Callable[[compute.WaitRegionOperationRequest], compute.Operati # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_security_policies/client.py b/google/cloud/compute_v1/services/region_security_policies/client.py index 1cd602d99..f628795d2 100644 --- a/google/cloud/compute_v1/services/region_security_policies/client.py +++ b/google/cloud/compute_v1/services/region_security_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_security_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionSecurityPoliciesTransport, DEFAULT_CLIENT_INFO @@ -446,22 +449,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -504,6 +494,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionSecurityPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + security_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified policy. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionSecurityPolicyRequest, dict]): + The request object. A request message for + RegionSecurityPolicies.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + delete. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, security_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionSecurityPolicyRequest): + request = compute.DeleteRegionSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if security_policy is not None: + request.security_policy = security_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionSecurityPolicyRequest, dict] = None, @@ -639,22 +743,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -697,6 +788,119 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionSecurityPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + security_policy_resource: compute.SecurityPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new policy in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionSecurityPolicyRequest, dict]): + The request object. A request message for + RegionSecurityPolicies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_resource (google.cloud.compute_v1.types.SecurityPolicy): + The body resource for this request + This corresponds to the ``security_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, security_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionSecurityPolicyRequest): + request = compute.InsertRegionSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if security_policy_resource is not None: + request.security_policy_resource = security_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionSecurityPoliciesRequest, dict] = None, @@ -838,22 +1042,109 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, security_policy, security_policy_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionSecurityPolicyRequest): + request = compute.PatchRegionSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if security_policy is not None: + request.security_policy = security_policy + if security_policy_resource is not None: + request.security_policy_resource = security_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchRegionSecurityPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + security_policy: str = None, + security_policy_resource: compute.SecurityPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified policy with the data included + in the request. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionSecurityPolicyRequest, dict]): + The request object. A request message for + RegionSecurityPolicies.Patch. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + update. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_resource (google.cloud.compute_v1.types.SecurityPolicy): + The body resource for this request + This corresponds to the ``security_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -897,6 +1188,31 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_security_policies/transports/base.py b/google/cloud/compute_v1/services/region_security_policies/transports/base.py index da0e94071..38f4f56c1 100644 --- a/google/cloud/compute_v1/services/region_security_policies/transports/base.py +++ b/google/cloud/compute_v1/services/region_security_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -204,5 +207,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionSecurityPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/region_security_policies/transports/rest.py b/google/cloud/compute_v1/services/region_security_policies/transports/rest.py index 71cb5fae5..bbd6127b9 100644 --- a/google/cloud/compute_v1/services/region_security_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/region_security_policies/transports/rest.py @@ -896,6 +896,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_ssl_certificates/client.py b/google/cloud/compute_v1/services/region_ssl_certificates/client.py index 5ef1778c5..c1930b8ad 100644 --- a/google/cloud/compute_v1/services/region_ssl_certificates/client.py +++ b/google/cloud/compute_v1/services/region_ssl_certificates/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_ssl_certificates import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionSslCertificatesTransport, DEFAULT_CLIENT_INFO @@ -447,22 +450,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -505,6 +495,121 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionSslCertificateRequest, dict] = None, + *, + project: str = None, + region: str = None, + ssl_certificate: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified SslCertificate resource in the + region. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionSslCertificateRequest, dict]): + The request object. A request message for + RegionSslCertificates.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_certificate (str): + Name of the SslCertificate resource + to delete. + + This corresponds to the ``ssl_certificate`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, ssl_certificate]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionSslCertificateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionSslCertificateRequest): + request = compute.DeleteRegionSslCertificateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if ssl_certificate is not None: + request.ssl_certificate = ssl_certificate + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionSslCertificateRequest, dict] = None, @@ -654,22 +759,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -712,6 +804,120 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionSslCertificateRequest, dict] = None, + *, + project: str = None, + region: str = None, + ssl_certificate_resource: compute.SslCertificate = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a SslCertificate resource in the specified + project and region using the data included in the + request + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionSslCertificateRequest, dict]): + The request object. A request message for + RegionSslCertificates.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_certificate_resource (google.cloud.compute_v1.types.SslCertificate): + The body resource for this request + This corresponds to the ``ssl_certificate_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, ssl_certificate_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionSslCertificateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionSslCertificateRequest): + request = compute.InsertRegionSslCertificateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if ssl_certificate_resource is not None: + request.ssl_certificate_resource = ssl_certificate_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionSslCertificatesRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/region_ssl_certificates/transports/base.py b/google/cloud/compute_v1/services/region_ssl_certificates/transports/base.py index f47c8d4f7..613b6e896 100644 --- a/google/cloud/compute_v1/services/region_ssl_certificates/transports/base.py +++ b/google/cloud/compute_v1/services/region_ssl_certificates/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -190,5 +193,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionSslCertificatesTransport",) diff --git a/google/cloud/compute_v1/services/region_ssl_certificates/transports/rest.py b/google/cloud/compute_v1/services/region_ssl_certificates/transports/rest.py index 691b9ace3..5f99e8394 100644 --- a/google/cloud/compute_v1/services/region_ssl_certificates/transports/rest.py +++ b/google/cloud/compute_v1/services/region_ssl_certificates/transports/rest.py @@ -754,6 +754,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_target_http_proxies/client.py b/google/cloud/compute_v1/services/region_target_http_proxies/client.py index 0e490db98..02c1d51a2 100644 --- a/google/cloud/compute_v1/services/region_target_http_proxies/client.py +++ b/google/cloud/compute_v1/services/region_target_http_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_target_http_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionTargetHttpProxiesTransport, DEFAULT_CLIENT_INFO @@ -446,22 +449,98 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_http_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionTargetHttpProxyRequest): + request = compute.DeleteRegionTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_http_proxy is not None: + request.target_http_proxy = target_http_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteRegionTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_http_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetHttpProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionTargetHttpProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpProxies.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy (str): + Name of the TargetHttpProxy resource + to delete. + + This corresponds to the ``target_http_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -501,6 +580,31 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -650,22 +754,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -708,6 +799,120 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_http_proxy_resource: compute.TargetHttpProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetHttpProxy resource in the specified + project and region using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionTargetHttpProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpProxies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy_resource (google.cloud.compute_v1.types.TargetHttpProxy): + The body resource for this request + This corresponds to the ``target_http_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_http_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionTargetHttpProxyRequest): + request = compute.InsertRegionTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_http_proxy_resource is not None: + request.target_http_proxy_resource = target_http_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionTargetHttpProxiesRequest, dict] = None, @@ -850,22 +1055,9 @@ def set_url_map_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -912,6 +1104,130 @@ def set_url_map_unary( # Done; return the response. return response + def set_url_map( + self, + request: Union[compute.SetUrlMapRegionTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_http_proxy: str = None, + url_map_reference_resource: compute.UrlMapReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the URL map for TargetHttpProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetUrlMapRegionTargetHttpProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpProxies.SetUrlMap. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy (str): + Name of the TargetHttpProxy to set a + URL map for. + + This corresponds to the ``target_http_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_reference_resource (google.cloud.compute_v1.types.UrlMapReference): + The body resource for this request + This corresponds to the ``url_map_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, target_http_proxy, url_map_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetUrlMapRegionTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetUrlMapRegionTargetHttpProxyRequest): + request = compute.SetUrlMapRegionTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_http_proxy is not None: + request.target_http_proxy = target_http_proxy + if url_map_reference_resource is not None: + request.url_map_reference_resource = url_map_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_url_map] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/region_target_http_proxies/transports/base.py b/google/cloud/compute_v1/services/region_target_http_proxies/transports/base.py index daa159152..04ba9ca5a 100644 --- a/google/cloud/compute_v1/services/region_target_http_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/region_target_http_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -204,5 +207,21 @@ def set_url_map( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionTargetHttpProxiesTransport",) diff --git a/google/cloud/compute_v1/services/region_target_http_proxies/transports/rest.py b/google/cloud/compute_v1/services/region_target_http_proxies/transports/rest.py index b478c9191..540ccd81a 100644 --- a/google/cloud/compute_v1/services/region_target_http_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/region_target_http_proxies/transports/rest.py @@ -907,6 +907,10 @@ def set_url_map( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_target_https_proxies/client.py b/google/cloud/compute_v1/services/region_target_https_proxies/client.py index 98e6f0dd7..c640065ee 100644 --- a/google/cloud/compute_v1/services/region_target_https_proxies/client.py +++ b/google/cloud/compute_v1/services/region_target_https_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_target_https_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionTargetHttpsProxiesTransport, DEFAULT_CLIENT_INFO @@ -446,22 +449,98 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_https_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionTargetHttpsProxyRequest): + request = compute.DeleteRegionTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteRegionTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_https_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetHttpsProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionTargetHttpsProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpsProxies.Delete. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to delete. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -501,6 +580,31 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -649,22 +753,98 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_https_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionTargetHttpsProxyRequest): + request = compute.InsertRegionTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_https_proxy_resource is not None: + request.target_https_proxy_resource = target_https_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_https_proxy_resource: compute.TargetHttpsProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetHttpsProxy resource in the specified + project and region using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionTargetHttpsProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpsProxies.Insert. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy_resource (google.cloud.compute_v1.types.TargetHttpsProxy): + The body resource for this request + This corresponds to the ``target_https_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -704,6 +884,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -851,22 +1056,109 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, target_https_proxy, target_https_proxy_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionTargetHttpsProxyRequest): + request = compute.PatchRegionTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if target_https_proxy_resource is not None: + request.target_https_proxy_resource = target_https_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchRegionTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_https_proxy: str = None, + target_https_proxy_resource: compute.TargetHttpsProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified regional TargetHttpsProxy + resource with the data included in the request. This + method supports PATCH semantics and uses JSON merge + patch format and processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionTargetHttpsProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpsProxies.Patch. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to patch. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy_resource (google.cloud.compute_v1.types.TargetHttpsProxy): + The body resource for this request + This corresponds to the ``target_https_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -910,6 +1202,31 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -965,22 +1282,122 @@ def set_ssl_certificates_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + target_https_proxy, + region_target_https_proxies_set_ssl_certificates_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslCertificatesRegionTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.SetSslCertificatesRegionTargetHttpsProxyRequest + ): + request = compute.SetSslCertificatesRegionTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if ( + region_target_https_proxies_set_ssl_certificates_request_resource + is not None + ): + request.region_target_https_proxies_set_ssl_certificates_request_resource = ( + region_target_https_proxies_set_ssl_certificates_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_ssl_certificates( + self, + request: Union[ + compute.SetSslCertificatesRegionTargetHttpsProxyRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + target_https_proxy: str = None, + region_target_https_proxies_set_ssl_certificates_request_resource: compute.RegionTargetHttpsProxiesSetSslCertificatesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Replaces SslCertificates for TargetHttpsProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslCertificatesRegionTargetHttpsProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpsProxies.SetSslCertificates. See the + method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to set an SslCertificates resource for. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_target_https_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.RegionTargetHttpsProxiesSetSslCertificatesRequest): + The body resource for this request + This corresponds to the ``region_target_https_proxies_set_ssl_certificates_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1036,6 +1453,31 @@ def set_ssl_certificates_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1089,22 +1531,108 @@ def set_url_map_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, target_https_proxy, url_map_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetUrlMapRegionTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetUrlMapRegionTargetHttpsProxyRequest): + request = compute.SetUrlMapRegionTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if url_map_reference_resource is not None: + request.url_map_reference_resource = url_map_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_url_map] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_url_map( + self, + request: Union[compute.SetUrlMapRegionTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_https_proxy: str = None, + url_map_reference_resource: compute.UrlMapReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the URL map for TargetHttpsProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetUrlMapRegionTargetHttpsProxyRequest, dict]): + The request object. A request message for + RegionTargetHttpsProxies.SetUrlMap. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy to set a + URL map for. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_reference_resource (google.cloud.compute_v1.types.UrlMapReference): + The body resource for this request + This corresponds to the ``url_map_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1148,6 +1676,31 @@ def set_url_map_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_target_https_proxies/transports/base.py b/google/cloud/compute_v1/services/region_target_https_proxies/transports/base.py index b54453137..e742a83a0 100644 --- a/google/cloud/compute_v1/services/region_target_https_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/region_target_https_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -232,5 +235,21 @@ def set_url_map( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionTargetHttpsProxiesTransport",) diff --git a/google/cloud/compute_v1/services/region_target_https_proxies/transports/rest.py b/google/cloud/compute_v1/services/region_target_https_proxies/transports/rest.py index 289d7fa83..c52230907 100644 --- a/google/cloud/compute_v1/services/region_target_https_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/region_target_https_proxies/transports/rest.py @@ -1235,6 +1235,10 @@ def set_url_map( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/region_url_maps/client.py b/google/cloud/compute_v1/services/region_url_maps/client.py index 1c433158b..a80e841f2 100644 --- a/google/cloud/compute_v1/services/region_url_maps/client.py +++ b/google/cloud/compute_v1/services/region_url_maps/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.region_url_maps import pagers from google.cloud.compute_v1.types import compute from .transports.base import RegionUrlMapsTransport, DEFAULT_CLIENT_INFO @@ -444,22 +447,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -502,6 +492,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRegionUrlMapRequest, dict] = None, + *, + project: str = None, + region: str = None, + url_map: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified UrlMap resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionUrlMapRequest, dict]): + The request object. A request message for + RegionUrlMaps.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap resource to + delete. + + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, url_map]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRegionUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionUrlMapRequest): + request = compute.DeleteRegionUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if url_map is not None: + request.url_map = url_map + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRegionUrlMapRequest, dict] = None, @@ -654,22 +758,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -712,6 +803,119 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRegionUrlMapRequest, dict] = None, + *, + project: str = None, + region: str = None, + url_map_resource: compute.UrlMap = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a UrlMap resource in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionUrlMapRequest, dict]): + The request object. A request message for + RegionUrlMaps.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_resource (google.cloud.compute_v1.types.UrlMap): + The body resource for this request + This corresponds to the ``url_map_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, url_map_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRegionUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionUrlMapRequest): + request = compute.InsertRegionUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if url_map_resource is not None: + request.url_map_resource = url_map_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRegionUrlMapsRequest, dict] = None, @@ -854,22 +1058,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -914,6 +1105,129 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchRegionUrlMapRequest, dict] = None, + *, + project: str = None, + region: str = None, + url_map: str = None, + url_map_resource: compute.UrlMap = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified UrlMap resource with the data + included in the request. This method supports PATCH + semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionUrlMapRequest, dict]): + The request object. A request message for + RegionUrlMaps.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap resource to patch. + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_resource (google.cloud.compute_v1.types.UrlMap): + The body resource for this request + This corresponds to the ``url_map_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, url_map, url_map_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRegionUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionUrlMapRequest): + request = compute.PatchRegionUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if url_map is not None: + request.url_map = url_map + if url_map_resource is not None: + request.url_map_resource = url_map_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateRegionUrlMapRequest, dict] = None, @@ -965,22 +1279,107 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, url_map, url_map_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateRegionUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateRegionUrlMapRequest): + request = compute.UpdateRegionUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if url_map is not None: + request.url_map = url_map + if url_map_resource is not None: + request.url_map_resource = url_map_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update( + self, + request: Union[compute.UpdateRegionUrlMapRequest, dict] = None, + *, + project: str = None, + region: str = None, + url_map: str = None, + url_map_resource: compute.UrlMap = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified UrlMap resource with the data + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateRegionUrlMapRequest, dict]): + The request object. A request message for + RegionUrlMaps.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap resource to + update. + + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_resource (google.cloud.compute_v1.types.UrlMap): + The body resource for this request + This corresponds to the ``url_map_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1022,6 +1421,31 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/region_url_maps/transports/base.py b/google/cloud/compute_v1/services/region_url_maps/transports/base.py index 6c1f1b458..283b1e958 100644 --- a/google/cloud/compute_v1/services/region_url_maps/transports/base.py +++ b/google/cloud/compute_v1/services/region_url_maps/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -234,5 +237,21 @@ def validate( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RegionUrlMapsTransport",) diff --git a/google/cloud/compute_v1/services/region_url_maps/transports/rest.py b/google/cloud/compute_v1/services/region_url_maps/transports/rest.py index d60f4b122..50a83939d 100644 --- a/google/cloud/compute_v1/services/region_url_maps/transports/rest.py +++ b/google/cloud/compute_v1/services/region_url_maps/transports/rest.py @@ -1196,6 +1196,10 @@ def validate( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/regions/client.py b/google/cloud/compute_v1/services/regions/client.py index 3e4f0f7b2..a6ad1b783 100644 --- a/google/cloud/compute_v1/services/regions/client.py +++ b/google/cloud/compute_v1/services/regions/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/regions/transports/base.py b/google/cloud/compute_v1/services/regions/transports/base.py index 771e8ae33..e11530b25 100644 --- a/google/cloud/compute_v1/services/regions/transports/base.py +++ b/google/cloud/compute_v1/services/regions/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -162,5 +163,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("RegionsTransport",) diff --git a/google/cloud/compute_v1/services/regions/transports/rest.py b/google/cloud/compute_v1/services/regions/transports/rest.py index 22c63f479..3bf181442 100644 --- a/google/cloud/compute_v1/services/regions/transports/rest.py +++ b/google/cloud/compute_v1/services/regions/transports/rest.py @@ -419,6 +419,10 @@ def list(self) -> Callable[[compute.ListRegionsRequest], compute.RegionList]: # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/reservations/client.py b/google/cloud/compute_v1/services/reservations/client.py index b4c5f50c5..35b175e2f 100644 --- a/google/cloud/compute_v1/services/reservations/client.py +++ b/google/cloud/compute_v1/services/reservations/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.reservations import pagers from google.cloud.compute_v1.types import compute from .transports.base import ReservationsTransport, DEFAULT_CLIENT_INFO @@ -520,22 +523,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -578,6 +568,116 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteReservationRequest, dict] = None, + *, + project: str = None, + zone: str = None, + reservation: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified reservation. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteReservationRequest, dict]): + The request object. A request message for + Reservations.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + reservation (str): + Name of the reservation to delete. + This corresponds to the ``reservation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, reservation]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteReservationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteReservationRequest): + request = compute.DeleteReservationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if reservation is not None: + request.reservation = reservation + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetReservationRequest, dict] = None, @@ -837,22 +937,95 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, reservation_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertReservationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertReservationRequest): + request = compute.InsertReservationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if reservation_resource is not None: + request.reservation_resource = reservation_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertReservationRequest, dict] = None, + *, + project: str = None, + zone: str = None, + reservation_resource: compute.Reservation = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new reservation. For more information, read + Reserving zonal resources. + + Args: + request (Union[google.cloud.compute_v1.types.InsertReservationRequest, dict]): + The request object. A request message for + Reservations.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + reservation_resource (google.cloud.compute_v1.types.Reservation): + The body resource for this request + This corresponds to the ``reservation_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -892,6 +1065,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1031,22 +1229,9 @@ def resize_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1095,6 +1280,130 @@ def resize_unary( # Done; return the response. return response + def resize( + self, + request: Union[compute.ResizeReservationRequest, dict] = None, + *, + project: str = None, + zone: str = None, + reservation: str = None, + reservations_resize_request_resource: compute.ReservationsResizeRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Resizes the reservation (applicable to standalone + reservations only). For more information, read Modifying + reservations. + + Args: + request (Union[google.cloud.compute_v1.types.ResizeReservationRequest, dict]): + The request object. A request message for + Reservations.Resize. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + reservation (str): + Name of the reservation to update. + This corresponds to the ``reservation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + reservations_resize_request_resource (google.cloud.compute_v1.types.ReservationsResizeRequest): + The body resource for this request + This corresponds to the ``reservations_resize_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, zone, reservation, reservations_resize_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ResizeReservationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ResizeReservationRequest): + request = compute.ResizeReservationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if reservation is not None: + request.reservation = reservation + if reservations_resize_request_resource is not None: + request.reservations_resize_request_resource = ( + reservations_resize_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.resize] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_iam_policy( self, request: Union[compute.SetIamPolicyReservationRequest, dict] = None, @@ -1381,22 +1690,9 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1441,6 +1737,124 @@ def update_unary( # Done; return the response. return response + def update( + self, + request: Union[compute.UpdateReservationRequest, dict] = None, + *, + project: str = None, + zone: str = None, + reservation: str = None, + reservation_resource: compute.Reservation = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Update share settings of the reservation. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateReservationRequest, dict]): + The request object. A request message for + Reservations.Update. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone for this request. + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + reservation (str): + Name of the reservation to update. + This corresponds to the ``reservation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + reservation_resource (google.cloud.compute_v1.types.Reservation): + The body resource for this request + This corresponds to the ``reservation_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, reservation, reservation_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateReservationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateReservationRequest): + request = compute.UpdateReservationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if reservation is not None: + request.reservation = reservation + if reservation_resource is not None: + request.reservation_resource = reservation_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/reservations/transports/base.py b/google/cloud/compute_v1/services/reservations/transports/base.py index 4a114b0bc..c5937df15 100644 --- a/google/cloud/compute_v1/services/reservations/transports/base.py +++ b/google/cloud/compute_v1/services/reservations/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -279,5 +282,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ReservationsTransport",) diff --git a/google/cloud/compute_v1/services/reservations/transports/rest.py b/google/cloud/compute_v1/services/reservations/transports/rest.py index 56b8bea9f..b38c6a6cb 100644 --- a/google/cloud/compute_v1/services/reservations/transports/rest.py +++ b/google/cloud/compute_v1/services/reservations/transports/rest.py @@ -1663,6 +1663,10 @@ def update(self) -> Callable[[compute.UpdateReservationRequest], compute.Operati # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/resource_policies/client.py b/google/cloud/compute_v1/services/resource_policies/client.py index 0fbbc6463..5f32ba2ef 100644 --- a/google/cloud/compute_v1/services/resource_policies/client.py +++ b/google/cloud/compute_v1/services/resource_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.resource_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import ResourcePoliciesTransport, DEFAULT_CLIENT_INFO @@ -524,22 +527,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -582,6 +572,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteResourcePolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified resource policy. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteResourcePolicyRequest, dict]): + The request object. A request message for + ResourcePolicies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource_policy (str): + Name of the resource policy to + delete. + + This corresponds to the ``resource_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, resource_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteResourcePolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteResourcePolicyRequest): + request = compute.DeleteResourcePolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource_policy is not None: + request.resource_policy = resource_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetResourcePolicyRequest, dict] = None, @@ -842,22 +944,94 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, resource_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertResourcePolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertResourcePolicyRequest): + request = compute.InsertResourcePolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource_policy_resource is not None: + request.resource_policy_resource = resource_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertResourcePolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource_policy_resource: compute.ResourcePolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new resource policy. + + Args: + request (Union[google.cloud.compute_v1.types.InsertResourcePolicyRequest, dict]): + The request object. A request message for + ResourcePolicies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource_policy_resource (google.cloud.compute_v1.types.ResourcePolicy): + The body resource for this request + This corresponds to the ``resource_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -897,6 +1071,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/resource_policies/transports/base.py b/google/cloud/compute_v1/services/resource_policies/transports/base.py index f72efc16b..559ae713c 100644 --- a/google/cloud/compute_v1/services/resource_policies/transports/base.py +++ b/google/cloud/compute_v1/services/resource_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -251,5 +254,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ResourcePoliciesTransport",) diff --git a/google/cloud/compute_v1/services/resource_policies/transports/rest.py b/google/cloud/compute_v1/services/resource_policies/transports/rest.py index 999868e3d..b225c8e6f 100644 --- a/google/cloud/compute_v1/services/resource_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/resource_policies/transports/rest.py @@ -1382,6 +1382,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/routers/client.py b/google/cloud/compute_v1/services/routers/client.py index bbcad487a..da903af54 100644 --- a/google/cloud/compute_v1/services/routers/client.py +++ b/google/cloud/compute_v1/services/routers/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.routers import pagers from google.cloud.compute_v1.types import compute from .transports.base import RoutersTransport, DEFAULT_CLIENT_INFO @@ -521,22 +524,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -579,6 +569,117 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRouterRequest, dict] = None, + *, + project: str = None, + region: str = None, + router: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified Router resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRouterRequest, dict]): + The request object. A request message for + Routers.Delete. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + router (str): + Name of the Router resource to + delete. + + This corresponds to the ``router`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, router]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRouterRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRouterRequest): + request = compute.DeleteRouterRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if router is not None: + request.router = router + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRouterRequest, dict] = None, @@ -892,22 +993,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -950,6 +1038,116 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertRouterRequest, dict] = None, + *, + project: str = None, + region: str = None, + router_resource: compute.Router = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a Router resource in the specified project + and region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRouterRequest, dict]): + The request object. A request message for + Routers.Insert. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + router_resource (google.cloud.compute_v1.types.Router): + The body resource for this request + This corresponds to the ``router_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, router_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRouterRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRouterRequest): + request = compute.InsertRouterRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if router_resource is not None: + request.router_resource = router_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListRoutersRequest, dict] = None, @@ -1086,22 +1284,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1146,6 +1331,126 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchRouterRequest, dict] = None, + *, + project: str = None, + region: str = None, + router: str = None, + router_resource: compute.Router = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified Router resource with the data + included in the request. This method supports PATCH + semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRouterRequest, dict]): + The request object. A request message for Routers.Patch. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + router (str): + Name of the Router resource to patch. + This corresponds to the ``router`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + router_resource (google.cloud.compute_v1.types.Router): + The body resource for this request + This corresponds to the ``router_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, router, router_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRouterRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRouterRequest): + request = compute.PatchRouterRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if router is not None: + request.router = router + if router_resource is not None: + request.router_resource = router_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def preview( self, request: Union[compute.PreviewRouterRequest, dict] = None, @@ -1290,22 +1595,108 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, router, router_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateRouterRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateRouterRequest): + request = compute.UpdateRouterRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if router is not None: + request.router = router + if router_resource is not None: + request.router_resource = router_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update( + self, + request: Union[compute.UpdateRouterRequest, dict] = None, + *, + project: str = None, + region: str = None, + router: str = None, + router_resource: compute.Router = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified Router resource with the data + included in the request. This method conforms to PUT + semantics, which requests that the state of the target + resource be created or replaced with the state defined + by the representation enclosed in the request message + payload. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateRouterRequest, dict]): + The request object. A request message for + Routers.Update. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + router (str): + Name of the Router resource to + update. + + This corresponds to the ``router`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + router_resource (google.cloud.compute_v1.types.Router): + The body resource for this request + This corresponds to the ``router_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1347,6 +1738,31 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/routers/transports/base.py b/google/cloud/compute_v1/services/routers/transports/base.py index e348facb2..279ad2b9b 100644 --- a/google/cloud/compute_v1/services/routers/transports/base.py +++ b/google/cloud/compute_v1/services/routers/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -278,5 +281,21 @@ def update( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RoutersTransport",) diff --git a/google/cloud/compute_v1/services/routers/transports/rest.py b/google/cloud/compute_v1/services/routers/transports/rest.py index 7a3bfb899..e1973631b 100644 --- a/google/cloud/compute_v1/services/routers/transports/rest.py +++ b/google/cloud/compute_v1/services/routers/transports/rest.py @@ -1542,6 +1542,10 @@ def update(self) -> Callable[[compute.UpdateRouterRequest], compute.Operation]: # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/routes/client.py b/google/cloud/compute_v1/services/routes/client.py index 1ecb7da9f..54c4fbbfd 100644 --- a/google/cloud/compute_v1/services/routes/client.py +++ b/google/cloud/compute_v1/services/routes/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.routes import pagers from google.cloud.compute_v1.types import compute from .transports.base import RoutesTransport, DEFAULT_CLIENT_INFO @@ -433,22 +436,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -489,6 +479,106 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteRouteRequest, dict] = None, + *, + project: str = None, + route: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified Route resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRouteRequest, dict]): + The request object. A request message for Routes.Delete. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + route (str): + Name of the Route resource to delete. + This corresponds to the ``route`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, route]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteRouteRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRouteRequest): + request = compute.DeleteRouteRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if route is not None: + request.route = route + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetRouteRequest, dict] = None, @@ -604,22 +694,86 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, route_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertRouteRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRouteRequest): + request = compute.InsertRouteRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if route_resource is not None: + request.route_resource = route_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRouteRequest, dict] = None, + *, + project: str = None, + route_resource: compute.Route = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a Route resource in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRouteRequest, dict]): + The request object. A request message for Routes.Insert. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + route_resource (google.cloud.compute_v1.types.Route): + The body resource for this request + This corresponds to the ``route_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -657,6 +811,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/routes/transports/base.py b/google/cloud/compute_v1/services/routes/transports/base.py index d1bc3a327..47c8f2d4e 100644 --- a/google/cloud/compute_v1/services/routes/transports/base.py +++ b/google/cloud/compute_v1/services/routes/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -189,5 +192,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("RoutesTransport",) diff --git a/google/cloud/compute_v1/services/routes/transports/rest.py b/google/cloud/compute_v1/services/routes/transports/rest.py index c2e5fc1cf..cfa77728b 100644 --- a/google/cloud/compute_v1/services/routes/transports/rest.py +++ b/google/cloud/compute_v1/services/routes/transports/rest.py @@ -705,6 +705,10 @@ def list(self) -> Callable[[compute.ListRoutesRequest], compute.RouteList]: # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/security_policies/client.py b/google/cloud/compute_v1/services/security_policies/client.py index e966031e9..4b852d483 100644 --- a/google/cloud/compute_v1/services/security_policies/client.py +++ b/google/cloud/compute_v1/services/security_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.security_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import SecurityPoliciesTransport, DEFAULT_CLIENT_INFO @@ -444,22 +447,9 @@ def add_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -504,6 +494,119 @@ def add_rule_unary( # Done; return the response. return response + def add_rule( + self, + request: Union[compute.AddRuleSecurityPolicyRequest, dict] = None, + *, + project: str = None, + security_policy: str = None, + security_policy_rule_resource: compute.SecurityPolicyRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Inserts a rule into a security policy. + + Args: + request (Union[google.cloud.compute_v1.types.AddRuleSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.AddRule. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + update. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_rule_resource (google.cloud.compute_v1.types.SecurityPolicyRule): + The body resource for this request + This corresponds to the ``security_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, security_policy, security_policy_rule_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddRuleSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddRuleSecurityPolicyRequest): + request = compute.AddRuleSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if security_policy is not None: + request.security_policy = security_policy + if security_policy_rule_resource is not None: + request.security_policy_rule_resource = security_policy_rule_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_rule] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def aggregated_list( self, request: Union[compute.AggregatedListSecurityPoliciesRequest, dict] = None, @@ -622,22 +725,88 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, security_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteSecurityPolicyRequest): + request = compute.DeleteSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if security_policy is not None: + request.security_policy = security_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteSecurityPolicyRequest, dict] = None, + *, + project: str = None, + security_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified policy. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + delete. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -675,6 +844,30 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -876,22 +1069,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -932,6 +1112,108 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertSecurityPolicyRequest, dict] = None, + *, + project: str = None, + security_policy_resource: compute.SecurityPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a new policy in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_resource (google.cloud.compute_v1.types.SecurityPolicy): + The body resource for this request + This corresponds to the ``security_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, security_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertSecurityPolicyRequest): + request = compute.InsertSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if security_policy_resource is not None: + request.security_policy_resource = security_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListSecurityPoliciesRequest, dict] = None, @@ -1133,22 +1415,99 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, security_policy, security_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchSecurityPolicyRequest): + request = compute.PatchSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if security_policy is not None: + request.security_policy = security_policy + if security_policy_resource is not None: + request.security_policy_resource = security_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchSecurityPolicyRequest, dict] = None, + *, + project: str = None, + security_policy: str = None, + security_policy_resource: compute.SecurityPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified policy with the data included + in the request. This cannot be used to be update the + rules in the policy. Please use the per rule methods + like addRule, patchRule, and removeRule instead. + + Args: + request (Union[google.cloud.compute_v1.types.PatchSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + update. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_resource (google.cloud.compute_v1.types.SecurityPolicy): + The body resource for this request + This corresponds to the ``security_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1188,6 +1547,30 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1233,22 +1616,98 @@ def patch_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, security_policy, security_policy_rule_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchRuleSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRuleSecurityPolicyRequest): + request = compute.PatchRuleSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if security_policy is not None: + request.security_policy = security_policy + if security_policy_rule_resource is not None: + request.security_policy_rule_resource = security_policy_rule_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch_rule] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_rule( + self, + request: Union[compute.PatchRuleSecurityPolicyRequest, dict] = None, + *, + project: str = None, + security_policy: str = None, + security_policy_rule_resource: compute.SecurityPolicyRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches a rule at the specified priority. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRuleSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.PatchRule. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + update. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy_rule_resource (google.cloud.compute_v1.types.SecurityPolicyRule): + The body resource for this request + This corresponds to the ``security_policy_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1290,6 +1749,30 @@ def patch_rule_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1329,22 +1812,9 @@ def remove_rule_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1385,6 +1855,109 @@ def remove_rule_unary( # Done; return the response. return response + def remove_rule( + self, + request: Union[compute.RemoveRuleSecurityPolicyRequest, dict] = None, + *, + project: str = None, + security_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes a rule at the specified priority. + + Args: + request (Union[google.cloud.compute_v1.types.RemoveRuleSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.RemoveRule. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_policy (str): + Name of the security policy to + update. + + This corresponds to the ``security_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, security_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.RemoveRuleSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.RemoveRuleSecurityPolicyRequest): + request = compute.RemoveRuleSecurityPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if security_policy is not None: + request.security_policy = security_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.remove_rule] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/security_policies/transports/base.py b/google/cloud/compute_v1/services/security_policies/transports/base.py index 8d580ed16..bba5c6805 100644 --- a/google/cloud/compute_v1/services/security_policies/transports/base.py +++ b/google/cloud/compute_v1/services/security_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -294,5 +297,21 @@ def remove_rule( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("SecurityPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/security_policies/transports/rest.py b/google/cloud/compute_v1/services/security_policies/transports/rest.py index 3952a9796..3c0d2034a 100644 --- a/google/cloud/compute_v1/services/security_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/security_policies/transports/rest.py @@ -1776,6 +1776,10 @@ def remove_rule( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/service_attachments/client.py b/google/cloud/compute_v1/services/service_attachments/client.py index bafebdad8..d44c8d34d 100644 --- a/google/cloud/compute_v1/services/service_attachments/client.py +++ b/google/cloud/compute_v1/services/service_attachments/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.service_attachments import pagers from google.cloud.compute_v1.types import compute from .transports.base import ServiceAttachmentsTransport, DEFAULT_CLIENT_INFO @@ -530,22 +533,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -588,6 +578,119 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteServiceAttachmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + service_attachment: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified ServiceAttachment in the given + scope + + Args: + request (Union[google.cloud.compute_v1.types.DeleteServiceAttachmentRequest, dict]): + The request object. A request message for + ServiceAttachments.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region of this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + service_attachment (str): + Name of the ServiceAttachment + resource to delete. + + This corresponds to the ``service_attachment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, service_attachment]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteServiceAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteServiceAttachmentRequest): + request = compute.DeleteServiceAttachmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if service_attachment is not None: + request.service_attachment = service_attachment + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetServiceAttachmentRequest, dict] = None, @@ -853,22 +956,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -911,6 +1001,118 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertServiceAttachmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + service_attachment_resource: compute.ServiceAttachment = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a ServiceAttachment in the specified project + in the given scope using the parameters that are + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertServiceAttachmentRequest, dict]): + The request object. A request message for + ServiceAttachments.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region of this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + service_attachment_resource (google.cloud.compute_v1.types.ServiceAttachment): + The body resource for this request + This corresponds to the ``service_attachment_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, service_attachment_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertServiceAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertServiceAttachmentRequest): + request = compute.InsertServiceAttachmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if service_attachment_resource is not None: + request.service_attachment_resource = service_attachment_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListServiceAttachmentsRequest, dict] = None, @@ -1054,22 +1256,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1116,6 +1305,135 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchServiceAttachmentRequest, dict] = None, + *, + project: str = None, + region: str = None, + service_attachment: str = None, + service_attachment_resource: compute.ServiceAttachment = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified ServiceAttachment resource with + the data included in the request. This method supports + PATCH semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchServiceAttachmentRequest, dict]): + The request object. A request message for + ServiceAttachments.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The region scoping this request and + should conform to RFC1035. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + service_attachment (str): + The resource id of the + ServiceAttachment to patch. It should + conform to RFC1035 resource name or be a + string form on an unsigned long number. + + This corresponds to the ``service_attachment`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + service_attachment_resource (google.cloud.compute_v1.types.ServiceAttachment): + The body resource for this request + This corresponds to the ``service_attachment_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, service_attachment, service_attachment_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchServiceAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchServiceAttachmentRequest): + request = compute.PatchServiceAttachmentRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if service_attachment is not None: + request.service_attachment = service_attachment + if service_attachment_resource is not None: + request.service_attachment_resource = service_attachment_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def set_iam_policy( self, request: Union[compute.SetIamPolicyServiceAttachmentRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/service_attachments/transports/base.py b/google/cloud/compute_v1/services/service_attachments/transports/base.py index 67153633d..2105cf0bd 100644 --- a/google/cloud/compute_v1/services/service_attachments/transports/base.py +++ b/google/cloud/compute_v1/services/service_attachments/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -265,5 +268,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("ServiceAttachmentsTransport",) diff --git a/google/cloud/compute_v1/services/service_attachments/transports/rest.py b/google/cloud/compute_v1/services/service_attachments/transports/rest.py index a0429a1b3..8d4c499ea 100644 --- a/google/cloud/compute_v1/services/service_attachments/transports/rest.py +++ b/google/cloud/compute_v1/services/service_attachments/transports/rest.py @@ -1549,6 +1549,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/snapshots/client.py b/google/cloud/compute_v1/services/snapshots/client.py index 76786dac3..846a5c639 100644 --- a/google/cloud/compute_v1/services/snapshots/client.py +++ b/google/cloud/compute_v1/services/snapshots/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.snapshots import pagers from google.cloud.compute_v1.types import compute from .transports.base import SnapshotsTransport, DEFAULT_CLIENT_INFO @@ -442,22 +445,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -498,6 +488,115 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteSnapshotRequest, dict] = None, + *, + project: str = None, + snapshot: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified Snapshot resource. Keep in mind + that deleting a single snapshot might not necessarily + delete all the data on that snapshot. If any data on the + snapshot that is marked for deletion is needed for + subsequent snapshots, the data will be moved to the next + corresponding snapshot. For more information, see + Deleting snapshots. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteSnapshotRequest, dict]): + The request object. A request message for + Snapshots.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + snapshot (str): + Name of the Snapshot resource to + delete. + + This corresponds to the ``snapshot`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, snapshot]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteSnapshotRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteSnapshotRequest): + request = compute.DeleteSnapshotRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if snapshot is not None: + request.snapshot = snapshot + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetSnapshotRequest, dict] = None, @@ -737,22 +836,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -793,6 +879,112 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertSnapshotRequest, dict] = None, + *, + project: str = None, + snapshot_resource: compute.Snapshot = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a snapshot in the specified project using the + data included in the request. For regular snapshot + creation, consider using this method instead of + disks.createSnapshot, as this method supports more + features, such as creating snapshots in a project + different from the source disk project. + + Args: + request (Union[google.cloud.compute_v1.types.InsertSnapshotRequest, dict]): + The request object. A request message for + Snapshots.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + snapshot_resource (google.cloud.compute_v1.types.Snapshot): + The body resource for this request + This corresponds to the ``snapshot_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, snapshot_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertSnapshotRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertSnapshotRequest): + request = compute.InsertSnapshotRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if snapshot_resource is not None: + request.snapshot_resource = snapshot_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListSnapshotsRequest, dict] = None, @@ -1047,22 +1239,9 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1109,6 +1288,122 @@ def set_labels_unary( # Done; return the response. return response + def set_labels( + self, + request: Union[compute.SetLabelsSnapshotRequest, dict] = None, + *, + project: str = None, + resource: str = None, + global_set_labels_request_resource: compute.GlobalSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on a snapshot. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsSnapshotRequest, dict]): + The request object. A request message for + Snapshots.SetLabels. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + This corresponds to the ``global_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, resource, global_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsSnapshotRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsSnapshotRequest): + request = compute.SetLabelsSnapshotRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if resource is not None: + request.resource = resource + if global_set_labels_request_resource is not None: + request.global_set_labels_request_resource = ( + global_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def test_iam_permissions( self, request: Union[compute.TestIamPermissionsSnapshotRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/snapshots/transports/base.py b/google/cloud/compute_v1/services/snapshots/transports/base.py index 8cdddccd1..1b7b847dc 100644 --- a/google/cloud/compute_v1/services/snapshots/transports/base.py +++ b/google/cloud/compute_v1/services/snapshots/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -248,5 +251,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("SnapshotsTransport",) diff --git a/google/cloud/compute_v1/services/snapshots/transports/rest.py b/google/cloud/compute_v1/services/snapshots/transports/rest.py index 526c2823b..71461382f 100644 --- a/google/cloud/compute_v1/services/snapshots/transports/rest.py +++ b/google/cloud/compute_v1/services/snapshots/transports/rest.py @@ -1365,6 +1365,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/ssl_certificates/client.py b/google/cloud/compute_v1/services/ssl_certificates/client.py index c5077cdbc..ad39f2029 100644 --- a/google/cloud/compute_v1/services/ssl_certificates/client.py +++ b/google/cloud/compute_v1/services/ssl_certificates/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.ssl_certificates import pagers from google.cloud.compute_v1.types import compute from .transports.base import SslCertificatesTransport, DEFAULT_CLIENT_INFO @@ -520,22 +523,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -576,6 +566,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteSslCertificateRequest, dict] = None, + *, + project: str = None, + ssl_certificate: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified SslCertificate resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteSslCertificateRequest, dict]): + The request object. A request message for + SslCertificates.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_certificate (str): + Name of the SslCertificate resource + to delete. + + This corresponds to the ``ssl_certificate`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, ssl_certificate]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteSslCertificateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteSslCertificateRequest): + request = compute.DeleteSslCertificateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if ssl_certificate is not None: + request.ssl_certificate = ssl_certificate + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetSslCertificateRequest, dict] = None, @@ -706,22 +799,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, ssl_certificate_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertSslCertificateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertSslCertificateRequest): + request = compute.InsertSslCertificateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if ssl_certificate_resource is not None: + request.ssl_certificate_resource = ssl_certificate_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertSslCertificateRequest, dict] = None, + *, + project: str = None, + ssl_certificate_resource: compute.SslCertificate = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a SslCertificate resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertSslCertificateRequest, dict]): + The request object. A request message for + SslCertificates.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_certificate_resource (google.cloud.compute_v1.types.SslCertificate): + The body resource for this request + This corresponds to the ``ssl_certificate_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -759,6 +917,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/ssl_certificates/transports/base.py b/google/cloud/compute_v1/services/ssl_certificates/transports/base.py index 2115ed647..270cadbcd 100644 --- a/google/cloud/compute_v1/services/ssl_certificates/transports/base.py +++ b/google/cloud/compute_v1/services/ssl_certificates/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -207,5 +210,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("SslCertificatesTransport",) diff --git a/google/cloud/compute_v1/services/ssl_certificates/transports/rest.py b/google/cloud/compute_v1/services/ssl_certificates/transports/rest.py index 7bcba37c4..bcba363e4 100644 --- a/google/cloud/compute_v1/services/ssl_certificates/transports/rest.py +++ b/google/cloud/compute_v1/services/ssl_certificates/transports/rest.py @@ -890,6 +890,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/ssl_policies/client.py b/google/cloud/compute_v1/services/ssl_policies/client.py index 7584c513d..ff2458ba0 100644 --- a/google/cloud/compute_v1/services/ssl_policies/client.py +++ b/google/cloud/compute_v1/services/ssl_policies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.ssl_policies import pagers from google.cloud.compute_v1.types import compute from .transports.base import SslPoliciesTransport, DEFAULT_CLIENT_INFO @@ -439,22 +442,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -495,6 +485,112 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteSslPolicyRequest, dict] = None, + *, + project: str = None, + ssl_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified SSL policy. The SSL policy + resource can be deleted only if it is not in use by any + TargetHttpsProxy or TargetSslProxy resources. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteSslPolicyRequest, dict]): + The request object. A request message for + SslPolicies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy (str): + Name of the SSL policy to delete. The + name must be 1-63 characters long, and + comply with RFC1035. + + This corresponds to the ``ssl_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, ssl_policy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteSslPolicyRequest): + request = compute.DeleteSslPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if ssl_policy is not None: + request.ssl_policy = ssl_policy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetSslPolicyRequest, dict] = None, @@ -615,22 +711,88 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, ssl_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertSslPolicyRequest): + request = compute.InsertSslPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if ssl_policy_resource is not None: + request.ssl_policy_resource = ssl_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertSslPolicyRequest, dict] = None, + *, + project: str = None, + ssl_policy_resource: compute.SslPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Returns the specified SSL policy resource. Gets a + list of available SSL policies by making a list() + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertSslPolicyRequest, dict]): + The request object. A request message for + SslPolicies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy_resource (google.cloud.compute_v1.types.SslPolicy): + The body resource for this request + This corresponds to the ``ssl_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -668,6 +830,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -863,22 +1049,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -921,6 +1094,119 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchSslPolicyRequest, dict] = None, + *, + project: str = None, + ssl_policy: str = None, + ssl_policy_resource: compute.SslPolicy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified SSL policy with the data + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.PatchSslPolicyRequest, dict]): + The request object. A request message for + SslPolicies.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy (str): + Name of the SSL policy to update. The + name must be 1-63 characters long, and + comply with RFC1035. + + This corresponds to the ``ssl_policy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy_resource (google.cloud.compute_v1.types.SslPolicy): + The body resource for this request + This corresponds to the ``ssl_policy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, ssl_policy, ssl_policy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchSslPolicyRequest): + request = compute.PatchSslPolicyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if ssl_policy is not None: + request.ssl_policy = ssl_policy + if ssl_policy_resource is not None: + request.ssl_policy_resource = ssl_policy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/ssl_policies/transports/base.py b/google/cloud/compute_v1/services/ssl_policies/transports/base.py index 4a973176c..78832bdd1 100644 --- a/google/cloud/compute_v1/services/ssl_policies/transports/base.py +++ b/google/cloud/compute_v1/services/ssl_policies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -221,5 +224,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("SslPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/ssl_policies/transports/rest.py b/google/cloud/compute_v1/services/ssl_policies/transports/rest.py index 59a7440ab..f7b42f967 100644 --- a/google/cloud/compute_v1/services/ssl_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/ssl_policies/transports/rest.py @@ -1011,6 +1011,10 @@ def patch(self) -> Callable[[compute.PatchSslPolicyRequest], compute.Operation]: # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/subnetworks/client.py b/google/cloud/compute_v1/services/subnetworks/client.py index 6e3456ee3..a8c0091b2 100644 --- a/google/cloud/compute_v1/services/subnetworks/client.py +++ b/google/cloud/compute_v1/services/subnetworks/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.subnetworks import pagers from google.cloud.compute_v1.types import compute from .transports.base import SubnetworksTransport, DEFAULT_CLIENT_INFO @@ -523,22 +526,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -581,6 +571,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteSubnetworkRequest, dict] = None, + *, + project: str = None, + region: str = None, + subnetwork: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified subnetwork. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteSubnetworkRequest, dict]): + The request object. A request message for + Subnetworks.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetwork (str): + Name of the Subnetwork resource to + delete. + + This corresponds to the ``subnetwork`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, subnetwork]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteSubnetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteSubnetworkRequest): + request = compute.DeleteSubnetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if subnetwork is not None: + request.subnetwork = subnetwork + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def expand_ip_cidr_range_unary( self, request: Union[compute.ExpandIpCidrRangeSubnetworkRequest, dict] = None, @@ -632,22 +736,9 @@ def expand_ip_cidr_range_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -701,6 +792,138 @@ def expand_ip_cidr_range_unary( # Done; return the response. return response + def expand_ip_cidr_range( + self, + request: Union[compute.ExpandIpCidrRangeSubnetworkRequest, dict] = None, + *, + project: str = None, + region: str = None, + subnetwork: str = None, + subnetworks_expand_ip_cidr_range_request_resource: compute.SubnetworksExpandIpCidrRangeRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Expands the IP CIDR range of the subnetwork to a + specified value. + + Args: + request (Union[google.cloud.compute_v1.types.ExpandIpCidrRangeSubnetworkRequest, dict]): + The request object. A request message for + Subnetworks.ExpandIpCidrRange. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetwork (str): + Name of the Subnetwork resource to + update. + + This corresponds to the ``subnetwork`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetworks_expand_ip_cidr_range_request_resource (google.cloud.compute_v1.types.SubnetworksExpandIpCidrRangeRequest): + The body resource for this request + This corresponds to the ``subnetworks_expand_ip_cidr_range_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + subnetwork, + subnetworks_expand_ip_cidr_range_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ExpandIpCidrRangeSubnetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ExpandIpCidrRangeSubnetworkRequest): + request = compute.ExpandIpCidrRangeSubnetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if subnetwork is not None: + request.subnetwork = subnetwork + if subnetworks_expand_ip_cidr_range_request_resource is not None: + request.subnetworks_expand_ip_cidr_range_request_resource = ( + subnetworks_expand_ip_cidr_range_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.expand_ip_cidr_range] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetSubnetworkRequest, dict] = None, @@ -966,22 +1189,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1024,6 +1234,119 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertSubnetworkRequest, dict] = None, + *, + project: str = None, + region: str = None, + subnetwork_resource: compute.Subnetwork = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a subnetwork in the specified project using + the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertSubnetworkRequest, dict]): + The request object. A request message for + Subnetworks.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetwork_resource (google.cloud.compute_v1.types.Subnetwork): + The body resource for this request + This corresponds to the ``subnetwork_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, subnetwork_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertSubnetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertSubnetworkRequest): + request = compute.InsertSubnetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if subnetwork_resource is not None: + request.subnetwork_resource = subnetwork_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListSubnetworksRequest, dict] = None, @@ -1250,22 +1573,110 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, subnetwork, subnetwork_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchSubnetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchSubnetworkRequest): + request = compute.PatchSubnetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if subnetwork is not None: + request.subnetwork = subnetwork + if subnetwork_resource is not None: + request.subnetwork_resource = subnetwork_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchSubnetworkRequest, dict] = None, + *, + project: str = None, + region: str = None, + subnetwork: str = None, + subnetwork_resource: compute.Subnetwork = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified subnetwork with the data + included in the request. Only certain fields can be + updated with a patch request as indicated in the field + descriptions. You must specify the current fingerprint + of the subnetwork resource being patched. + + Args: + request (Union[google.cloud.compute_v1.types.PatchSubnetworkRequest, dict]): + The request object. A request message for + Subnetworks.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetwork (str): + Name of the Subnetwork resource to + patch. + + This corresponds to the ``subnetwork`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetwork_resource (google.cloud.compute_v1.types.Subnetwork): + The body resource for this request + This corresponds to the ``subnetwork_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1307,6 +1718,31 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1500,22 +1936,117 @@ def set_private_ip_google_access_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + subnetwork, + subnetworks_set_private_ip_google_access_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetPrivateIpGoogleAccessSubnetworkRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetPrivateIpGoogleAccessSubnetworkRequest): + request = compute.SetPrivateIpGoogleAccessSubnetworkRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if subnetwork is not None: + request.subnetwork = subnetwork + if subnetworks_set_private_ip_google_access_request_resource is not None: + request.subnetworks_set_private_ip_google_access_request_resource = ( + subnetworks_set_private_ip_google_access_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.set_private_ip_google_access + ] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_private_ip_google_access( + self, + request: Union[compute.SetPrivateIpGoogleAccessSubnetworkRequest, dict] = None, + *, + project: str = None, + region: str = None, + subnetwork: str = None, + subnetworks_set_private_ip_google_access_request_resource: compute.SubnetworksSetPrivateIpGoogleAccessRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Set whether VMs in this subnet can access Google + services without assigning external IP addresses through + Private Google Access. + + Args: + request (Union[google.cloud.compute_v1.types.SetPrivateIpGoogleAccessSubnetworkRequest, dict]): + The request object. A request message for + Subnetworks.SetPrivateIpGoogleAccess. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetwork (str): + Name of the Subnetwork resource. + This corresponds to the ``subnetwork`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + subnetworks_set_private_ip_google_access_request_resource (google.cloud.compute_v1.types.SubnetworksSetPrivateIpGoogleAccessRequest): + The body resource for this request + This corresponds to the ``subnetworks_set_private_ip_google_access_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1568,6 +2099,31 @@ def set_private_ip_google_access_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/subnetworks/transports/base.py b/google/cloud/compute_v1/services/subnetworks/transports/base.py index 444564ff3..6eb37d8d7 100644 --- a/google/cloud/compute_v1/services/subnetworks/transports/base.py +++ b/google/cloud/compute_v1/services/subnetworks/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -310,5 +313,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("SubnetworksTransport",) diff --git a/google/cloud/compute_v1/services/subnetworks/transports/rest.py b/google/cloud/compute_v1/services/subnetworks/transports/rest.py index 376ae00d9..cd848dc67 100644 --- a/google/cloud/compute_v1/services/subnetworks/transports/rest.py +++ b/google/cloud/compute_v1/services/subnetworks/transports/rest.py @@ -1968,6 +1968,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_grpc_proxies/client.py b/google/cloud/compute_v1/services/target_grpc_proxies/client.py index 1e33fe3cb..de5a89111 100644 --- a/google/cloud/compute_v1/services/target_grpc_proxies/client.py +++ b/google/cloud/compute_v1/services/target_grpc_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_grpc_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetGrpcProxiesTransport, DEFAULT_CLIENT_INFO @@ -439,22 +442,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -495,6 +485,110 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteTargetGrpcProxyRequest, dict] = None, + *, + project: str = None, + target_grpc_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetGrpcProxy in the given + scope + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetGrpcProxyRequest, dict]): + The request object. A request message for + TargetGrpcProxies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_grpc_proxy (str): + Name of the TargetGrpcProxy resource + to delete. + + This corresponds to the ``target_grpc_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_grpc_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetGrpcProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetGrpcProxyRequest): + request = compute.DeleteTargetGrpcProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_grpc_proxy is not None: + request.target_grpc_proxy = target_grpc_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetTargetGrpcProxyRequest, dict] = None, @@ -616,22 +710,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -672,6 +753,109 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertTargetGrpcProxyRequest, dict] = None, + *, + project: str = None, + target_grpc_proxy_resource: compute.TargetGrpcProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetGrpcProxy in the specified project in + the given scope using the parameters that are included + in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetGrpcProxyRequest, dict]): + The request object. A request message for + TargetGrpcProxies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_grpc_proxy_resource (google.cloud.compute_v1.types.TargetGrpcProxy): + The body resource for this request + This corresponds to the ``target_grpc_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_grpc_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetGrpcProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetGrpcProxyRequest): + request = compute.InsertTargetGrpcProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_grpc_proxy_resource is not None: + request.target_grpc_proxy_resource = target_grpc_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListTargetGrpcProxiesRequest, dict] = None, @@ -797,22 +981,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -857,6 +1028,122 @@ def patch_unary( # Done; return the response. return response + def patch( + self, + request: Union[compute.PatchTargetGrpcProxyRequest, dict] = None, + *, + project: str = None, + target_grpc_proxy: str = None, + target_grpc_proxy_resource: compute.TargetGrpcProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified TargetGrpcProxy resource with + the data included in the request. This method supports + PATCH semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchTargetGrpcProxyRequest, dict]): + The request object. A request message for + TargetGrpcProxies.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_grpc_proxy (str): + Name of the TargetGrpcProxy resource + to patch. + + This corresponds to the ``target_grpc_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_grpc_proxy_resource (google.cloud.compute_v1.types.TargetGrpcProxy): + The body resource for this request + This corresponds to the ``target_grpc_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, target_grpc_proxy, target_grpc_proxy_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchTargetGrpcProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchTargetGrpcProxyRequest): + request = compute.PatchTargetGrpcProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_grpc_proxy is not None: + request.target_grpc_proxy = target_grpc_proxy + if target_grpc_proxy_resource is not None: + request.target_grpc_proxy_resource = target_grpc_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/target_grpc_proxies/transports/base.py b/google/cloud/compute_v1/services/target_grpc_proxies/transports/base.py index 75c1964a6..b4174837f 100644 --- a/google/cloud/compute_v1/services/target_grpc_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/target_grpc_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -204,5 +207,21 @@ def patch( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetGrpcProxiesTransport",) diff --git a/google/cloud/compute_v1/services/target_grpc_proxies/transports/rest.py b/google/cloud/compute_v1/services/target_grpc_proxies/transports/rest.py index 33d59a9fe..8e7c4dcc4 100644 --- a/google/cloud/compute_v1/services/target_grpc_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/target_grpc_proxies/transports/rest.py @@ -895,6 +895,10 @@ def patch( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_http_proxies/client.py b/google/cloud/compute_v1/services/target_http_proxies/client.py index 1c6eb9a0e..75ec7fada 100644 --- a/google/cloud/compute_v1/services/target_http_proxies/client.py +++ b/google/cloud/compute_v1/services/target_http_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_http_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetHttpProxiesTransport, DEFAULT_CLIENT_INFO @@ -520,22 +523,88 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_http_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetHttpProxyRequest): + request = compute.DeleteTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_http_proxy is not None: + request.target_http_proxy = target_http_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + target_http_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetHttpProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetHttpProxyRequest, dict]): + The request object. A request message for + TargetHttpProxies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy (str): + Name of the TargetHttpProxy resource + to delete. + + This corresponds to the ``target_http_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -573,6 +642,30 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -703,22 +796,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -759,6 +839,108 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + target_http_proxy_resource: compute.TargetHttpProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetHttpProxy resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetHttpProxyRequest, dict]): + The request object. A request message for + TargetHttpProxies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy_resource (google.cloud.compute_v1.types.TargetHttpProxy): + The body resource for this request + This corresponds to the ``target_http_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_http_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetHttpProxyRequest): + request = compute.InsertTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_http_proxy_resource is not None: + request.target_http_proxy_resource = target_http_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListTargetHttpProxiesRequest, dict] = None, @@ -885,22 +1067,101 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, target_http_proxy, target_http_proxy_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchTargetHttpProxyRequest): + request = compute.PatchTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_http_proxy is not None: + request.target_http_proxy = target_http_proxy + if target_http_proxy_resource is not None: + request.target_http_proxy_resource = target_http_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + target_http_proxy: str = None, + target_http_proxy_resource: compute.TargetHttpProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified TargetHttpProxy resource with + the data included in the request. This method supports + PATCH semantics and uses JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchTargetHttpProxyRequest, dict]): + The request object. A request message for + TargetHttpProxies.Patch. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy (str): + Name of the TargetHttpProxy resource + to patch. + + This corresponds to the ``target_http_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy_resource (google.cloud.compute_v1.types.TargetHttpProxy): + The body resource for this request + This corresponds to the ``target_http_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -942,6 +1203,30 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -987,22 +1272,9 @@ def set_url_map_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1047,6 +1319,119 @@ def set_url_map_unary( # Done; return the response. return response + def set_url_map( + self, + request: Union[compute.SetUrlMapTargetHttpProxyRequest, dict] = None, + *, + project: str = None, + target_http_proxy: str = None, + url_map_reference_resource: compute.UrlMapReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the URL map for TargetHttpProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetUrlMapTargetHttpProxyRequest, dict]): + The request object. A request message for + TargetHttpProxies.SetUrlMap. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_http_proxy (str): + Name of the TargetHttpProxy to set a + URL map for. + + This corresponds to the ``target_http_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_reference_resource (google.cloud.compute_v1.types.UrlMapReference): + The body resource for this request + This corresponds to the ``url_map_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, target_http_proxy, url_map_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetUrlMapTargetHttpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetUrlMapTargetHttpProxyRequest): + request = compute.SetUrlMapTargetHttpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_http_proxy is not None: + request.target_http_proxy = target_http_proxy + if url_map_reference_resource is not None: + request.url_map_reference_resource = url_map_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_url_map] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/target_http_proxies/transports/base.py b/google/cloud/compute_v1/services/target_http_proxies/transports/base.py index 62efc25b6..f0f219912 100644 --- a/google/cloud/compute_v1/services/target_http_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/target_http_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -235,5 +238,21 @@ def set_url_map( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetHttpProxiesTransport",) diff --git a/google/cloud/compute_v1/services/target_http_proxies/transports/rest.py b/google/cloud/compute_v1/services/target_http_proxies/transports/rest.py index 8838e1170..488598312 100644 --- a/google/cloud/compute_v1/services/target_http_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/target_http_proxies/transports/rest.py @@ -1195,6 +1195,10 @@ def set_url_map( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_https_proxies/client.py b/google/cloud/compute_v1/services/target_https_proxies/client.py index 030eda64c..7b2e1ecb0 100644 --- a/google/cloud/compute_v1/services/target_https_proxies/client.py +++ b/google/cloud/compute_v1/services/target_https_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_https_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetHttpsProxiesTransport, DEFAULT_CLIENT_INFO @@ -520,22 +523,88 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_https_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetHttpsProxyRequest): + request = compute.DeleteTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetHttpsProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.Delete. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to delete. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -573,6 +642,30 @@ def delete_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -702,22 +795,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_https_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetHttpsProxyRequest): + request = compute.InsertTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy_resource is not None: + request.target_https_proxy_resource = target_https_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy_resource: compute.TargetHttpsProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetHttpsProxy resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.Insert. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy_resource (google.cloud.compute_v1.types.TargetHttpsProxy): + The body resource for this request + This corresponds to the ``target_https_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -755,6 +913,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -885,22 +1067,9 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -945,24 +1114,27 @@ def patch_unary( # Done; return the response. return response - def set_quic_override_unary( + def patch( self, - request: Union[compute.SetQuicOverrideTargetHttpsProxyRequest, dict] = None, + request: Union[compute.PatchTargetHttpsProxyRequest, dict] = None, *, project: str = None, target_https_proxy: str = None, - target_https_proxies_set_quic_override_request_resource: compute.TargetHttpsProxiesSetQuicOverrideRequest = None, + target_https_proxy_resource: compute.TargetHttpsProxy = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets the QUIC override policy for TargetHttpsProxy. + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified TargetHttpsProxy resource with + the data included in the request. This method supports + PATCH semantics and uses JSON merge patch format and + processing rules. Args: - request (Union[google.cloud.compute_v1.types.SetQuicOverrideTargetHttpsProxyRequest, dict]): + request (Union[google.cloud.compute_v1.types.PatchTargetHttpsProxyRequest, dict]): The request object. A request message for - TargetHttpsProxies.SetQuicOverride. See the method - description for details. + TargetHttpsProxies.Patch. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -970,15 +1142,14 @@ def set_quic_override_unary( should not be set. target_https_proxy (str): Name of the TargetHttpsProxy resource - to set the QUIC override policy for. The - name should conform to RFC1035. + to patch. This corresponds to the ``target_https_proxy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_https_proxies_set_quic_override_request_resource (google.cloud.compute_v1.types.TargetHttpsProxiesSetQuicOverrideRequest): + target_https_proxy_resource (google.cloud.compute_v1.types.TargetHttpsProxy): The body resource for this request - This corresponds to the ``target_https_proxies_set_quic_override_request_resource`` field + This corresponds to the ``target_https_proxy_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -988,33 +1159,16 @@ def set_quic_override_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [ - project, - target_https_proxy, - target_https_proxies_set_quic_override_request_resource, - ] + [project, target_https_proxy, target_https_proxy_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -1023,25 +1177,23 @@ def set_quic_override_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetQuicOverrideTargetHttpsProxyRequest. + # in a compute.PatchTargetHttpsProxyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetQuicOverrideTargetHttpsProxyRequest): - request = compute.SetQuicOverrideTargetHttpsProxyRequest(request) + if not isinstance(request, compute.PatchTargetHttpsProxyRequest): + request = compute.PatchTargetHttpsProxyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if target_https_proxy is not None: request.target_https_proxy = target_https_proxy - if target_https_proxies_set_quic_override_request_resource is not None: - request.target_https_proxies_set_quic_override_request_resource = ( - target_https_proxies_set_quic_override_request_resource - ) + if target_https_proxy_resource is not None: + request.target_https_proxy_resource = target_https_proxy_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_quic_override] + rpc = self._transport._wrapped_methods[self._transport.patch] # Send the request. response = rpc( @@ -1051,26 +1203,50 @@ def set_quic_override_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_ssl_certificates_unary( + def set_quic_override_unary( self, - request: Union[compute.SetSslCertificatesTargetHttpsProxyRequest, dict] = None, + request: Union[compute.SetQuicOverrideTargetHttpsProxyRequest, dict] = None, *, project: str = None, target_https_proxy: str = None, - target_https_proxies_set_ssl_certificates_request_resource: compute.TargetHttpsProxiesSetSslCertificatesRequest = None, + target_https_proxies_set_quic_override_request_resource: compute.TargetHttpsProxiesSetQuicOverrideRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Replaces SslCertificates for TargetHttpsProxy. + r"""Sets the QUIC override policy for TargetHttpsProxy. Args: - request (Union[google.cloud.compute_v1.types.SetSslCertificatesTargetHttpsProxyRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetQuicOverrideTargetHttpsProxyRequest, dict]): The request object. A request message for - TargetHttpsProxies.SetSslCertificates. See the method + TargetHttpsProxies.SetQuicOverride. See the method description for details. project (str): Project ID for this request. @@ -1079,14 +1255,15 @@ def set_ssl_certificates_unary( should not be set. target_https_proxy (str): Name of the TargetHttpsProxy resource - to set an SslCertificates resource for. + to set the QUIC override policy for. The + name should conform to RFC1035. This corresponds to the ``target_https_proxy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_https_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.TargetHttpsProxiesSetSslCertificatesRequest): + target_https_proxies_set_quic_override_request_resource (google.cloud.compute_v1.types.TargetHttpsProxiesSetQuicOverrideRequest): The body resource for this request - This corresponds to the ``target_https_proxies_set_ssl_certificates_request_resource`` field + This corresponds to the ``target_https_proxies_set_quic_override_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1096,22 +1273,9 @@ def set_ssl_certificates_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1121,7 +1285,7 @@ def set_ssl_certificates_unary( [ project, target_https_proxy, - target_https_proxies_set_ssl_certificates_request_resource, + target_https_proxies_set_quic_override_request_resource, ] ) if request is not None and has_flattened_params: @@ -1131,25 +1295,25 @@ def set_ssl_certificates_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetSslCertificatesTargetHttpsProxyRequest. + # in a compute.SetQuicOverrideTargetHttpsProxyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetSslCertificatesTargetHttpsProxyRequest): - request = compute.SetSslCertificatesTargetHttpsProxyRequest(request) + if not isinstance(request, compute.SetQuicOverrideTargetHttpsProxyRequest): + request = compute.SetQuicOverrideTargetHttpsProxyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if target_https_proxy is not None: request.target_https_proxy = target_https_proxy - if target_https_proxies_set_ssl_certificates_request_resource is not None: - request.target_https_proxies_set_ssl_certificates_request_resource = ( - target_https_proxies_set_ssl_certificates_request_resource + if target_https_proxies_set_quic_override_request_resource is not None: + request.target_https_proxies_set_quic_override_request_resource = ( + target_https_proxies_set_quic_override_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + rpc = self._transport._wrapped_methods[self._transport.set_quic_override] # Send the request. response = rpc( @@ -1162,13 +1326,347 @@ def set_ssl_certificates_unary( # Done; return the response. return response - def set_ssl_policy_unary( + def set_quic_override( self, - request: Union[compute.SetSslPolicyTargetHttpsProxyRequest, dict] = None, + request: Union[compute.SetQuicOverrideTargetHttpsProxyRequest, dict] = None, *, project: str = None, target_https_proxy: str = None, - ssl_policy_reference_resource: compute.SslPolicyReference = None, + target_https_proxies_set_quic_override_request_resource: compute.TargetHttpsProxiesSetQuicOverrideRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the QUIC override policy for TargetHttpsProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetQuicOverrideTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.SetQuicOverride. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to set the QUIC override policy for. The + name should conform to RFC1035. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxies_set_quic_override_request_resource (google.cloud.compute_v1.types.TargetHttpsProxiesSetQuicOverrideRequest): + The body resource for this request + This corresponds to the ``target_https_proxies_set_quic_override_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_https_proxy, + target_https_proxies_set_quic_override_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetQuicOverrideTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetQuicOverrideTargetHttpsProxyRequest): + request = compute.SetQuicOverrideTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if target_https_proxies_set_quic_override_request_resource is not None: + request.target_https_proxies_set_quic_override_request_resource = ( + target_https_proxies_set_quic_override_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_quic_override] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_ssl_certificates_unary( + self, + request: Union[compute.SetSslCertificatesTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy: str = None, + target_https_proxies_set_ssl_certificates_request_resource: compute.TargetHttpsProxiesSetSslCertificatesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Replaces SslCertificates for TargetHttpsProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslCertificatesTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.SetSslCertificates. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to set an SslCertificates resource for. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.TargetHttpsProxiesSetSslCertificatesRequest): + The body resource for this request + This corresponds to the ``target_https_proxies_set_ssl_certificates_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_https_proxy, + target_https_proxies_set_ssl_certificates_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslCertificatesTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetSslCertificatesTargetHttpsProxyRequest): + request = compute.SetSslCertificatesTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if target_https_proxies_set_ssl_certificates_request_resource is not None: + request.target_https_proxies_set_ssl_certificates_request_resource = ( + target_https_proxies_set_ssl_certificates_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_ssl_certificates( + self, + request: Union[compute.SetSslCertificatesTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy: str = None, + target_https_proxies_set_ssl_certificates_request_resource: compute.TargetHttpsProxiesSetSslCertificatesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Replaces SslCertificates for TargetHttpsProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslCertificatesTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.SetSslCertificates. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + to set an SslCertificates resource for. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.TargetHttpsProxiesSetSslCertificatesRequest): + The body resource for this request + This corresponds to the ``target_https_proxies_set_ssl_certificates_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_https_proxy, + target_https_proxies_set_ssl_certificates_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslCertificatesTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetSslCertificatesTargetHttpsProxyRequest): + request = compute.SetSslCertificatesTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if target_https_proxies_set_ssl_certificates_request_resource is not None: + request.target_https_proxies_set_ssl_certificates_request_resource = ( + target_https_proxies_set_ssl_certificates_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_ssl_policy_unary( + self, + request: Union[compute.SetSslPolicyTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy: str = None, + ssl_policy_reference_resource: compute.SslPolicyReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), @@ -1210,22 +1708,104 @@ def set_ssl_policy_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, target_https_proxy, ssl_policy_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslPolicyTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetSslPolicyTargetHttpsProxyRequest): + request = compute.SetSslPolicyTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if ssl_policy_reference_resource is not None: + request.ssl_policy_reference_resource = ssl_policy_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_ssl_policy( + self, + request: Union[compute.SetSslPolicyTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy: str = None, + ssl_policy_reference_resource: compute.SslPolicyReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the SSL policy for TargetHttpsProxy. The SSL + policy specifies the server-side support for SSL + features. This affects connections between clients and + the HTTPS proxy load balancer. They do not affect the + connection between the load balancer and the backends. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslPolicyTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.SetSslPolicy. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + whose SSL policy is to be set. The name + must be 1-63 characters long, and comply + with RFC1035. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy_reference_resource (google.cloud.compute_v1.types.SslPolicyReference): + The body resource for this request + This corresponds to the ``ssl_policy_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1267,6 +1847,30 @@ def set_ssl_policy_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1312,22 +1916,9 @@ def set_url_map_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1372,6 +1963,119 @@ def set_url_map_unary( # Done; return the response. return response + def set_url_map( + self, + request: Union[compute.SetUrlMapTargetHttpsProxyRequest, dict] = None, + *, + project: str = None, + target_https_proxy: str = None, + url_map_reference_resource: compute.UrlMapReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the URL map for TargetHttpsProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetUrlMapTargetHttpsProxyRequest, dict]): + The request object. A request message for + TargetHttpsProxies.SetUrlMap. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_https_proxy (str): + Name of the TargetHttpsProxy resource + whose URL map is to be set. + + This corresponds to the ``target_https_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_reference_resource (google.cloud.compute_v1.types.UrlMapReference): + The body resource for this request + This corresponds to the ``url_map_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, target_https_proxy, url_map_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetUrlMapTargetHttpsProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetUrlMapTargetHttpsProxyRequest): + request = compute.SetUrlMapTargetHttpsProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_https_proxy is not None: + request.target_https_proxy = target_https_proxy + if url_map_reference_resource is not None: + request.url_map_reference_resource = url_map_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_url_map] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/target_https_proxies/transports/base.py b/google/cloud/compute_v1/services/target_https_proxies/transports/base.py index b5d37e215..1e514689e 100644 --- a/google/cloud/compute_v1/services/target_https_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/target_https_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -277,5 +280,21 @@ def set_url_map( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetHttpsProxiesTransport",) diff --git a/google/cloud/compute_v1/services/target_https_proxies/transports/rest.py b/google/cloud/compute_v1/services/target_https_proxies/transports/rest.py index 60be5f57f..05a914d7c 100644 --- a/google/cloud/compute_v1/services/target_https_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/target_https_proxies/transports/rest.py @@ -1682,6 +1682,10 @@ def set_url_map( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_instances/client.py b/google/cloud/compute_v1/services/target_instances/client.py index 3efe2ffc8..7d42bf6d1 100644 --- a/google/cloud/compute_v1/services/target_instances/client.py +++ b/google/cloud/compute_v1/services/target_instances/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_instances import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetInstancesTransport, DEFAULT_CLIENT_INFO @@ -525,22 +528,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -583,6 +573,120 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteTargetInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + target_instance: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetInstance resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetInstanceRequest, dict]): + The request object. A request message for + TargetInstances.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone scoping this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_instance (str): + Name of the TargetInstance resource + to delete. + + This corresponds to the ``target_instance`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, target_instance]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetInstanceRequest): + request = compute.DeleteTargetInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if target_instance is not None: + request.target_instance = target_instance + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetTargetInstanceRequest, dict] = None, @@ -723,22 +827,97 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, zone, target_instance_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetInstanceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetInstanceRequest): + request = compute.InsertTargetInstanceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if zone is not None: + request.zone = zone + if target_instance_resource is not None: + request.target_instance_resource = target_instance_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertTargetInstanceRequest, dict] = None, + *, + project: str = None, + zone: str = None, + target_instance_resource: compute.TargetInstance = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetInstance resource in the specified + project and zone using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetInstanceRequest, dict]): + The request object. A request message for + TargetInstances.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + zone (str): + Name of the zone scoping this + request. + + This corresponds to the ``zone`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_instance_resource (google.cloud.compute_v1.types.TargetInstance): + The body resource for this request + This corresponds to the ``target_instance_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -778,6 +957,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._zone_operations_client + operation_request = compute.GetZoneOperationRequest() + operation_request.project = request.project + operation_request.zone = request.zone + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/target_instances/transports/base.py b/google/cloud/compute_v1/services/target_instances/transports/base.py index b56422c21..092c60f40 100644 --- a/google/cloud/compute_v1/services/target_instances/transports/base.py +++ b/google/cloud/compute_v1/services/target_instances/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import zone_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -207,5 +210,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _zone_operations_client(self) -> zone_operations.ZoneOperationsClient: + ex_op_service = self._extended_operations_services.get("zone_operations") + if not ex_op_service: + ex_op_service = zone_operations.ZoneOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["zone_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetInstancesTransport",) diff --git a/google/cloud/compute_v1/services/target_instances/transports/rest.py b/google/cloud/compute_v1/services/target_instances/transports/rest.py index 1e0f2e916..dbb679d02 100644 --- a/google/cloud/compute_v1/services/target_instances/transports/rest.py +++ b/google/cloud/compute_v1/services/target_instances/transports/rest.py @@ -882,6 +882,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_pools/client.py b/google/cloud/compute_v1/services/target_pools/client.py index a57372f8d..a3431516f 100644 --- a/google/cloud/compute_v1/services/target_pools/client.py +++ b/google/cloud/compute_v1/services/target_pools/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_pools import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetPoolsTransport, DEFAULT_CLIENT_INFO @@ -450,22 +453,9 @@ def add_health_check_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -519,6 +509,137 @@ def add_health_check_unary( # Done; return the response. return response + def add_health_check( + self, + request: Union[compute.AddHealthCheckTargetPoolRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_pool: str = None, + target_pools_add_health_check_request_resource: compute.TargetPoolsAddHealthCheckRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds health check URLs to a target pool. + + Args: + request (Union[google.cloud.compute_v1.types.AddHealthCheckTargetPoolRequest, dict]): + The request object. A request message for + TargetPools.AddHealthCheck. See the method description + for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pool (str): + Name of the target pool to add a + health check to. + + This corresponds to the ``target_pool`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pools_add_health_check_request_resource (google.cloud.compute_v1.types.TargetPoolsAddHealthCheckRequest): + The body resource for this request + This corresponds to the ``target_pools_add_health_check_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + region, + target_pool, + target_pools_add_health_check_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddHealthCheckTargetPoolRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddHealthCheckTargetPoolRequest): + request = compute.AddHealthCheckTargetPoolRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_pool is not None: + request.target_pool = target_pool + if target_pools_add_health_check_request_resource is not None: + request.target_pools_add_health_check_request_resource = ( + target_pools_add_health_check_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_health_check] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def add_instance_unary( self, request: Union[compute.AddInstanceTargetPoolRequest, dict] = None, @@ -569,22 +690,110 @@ def add_instance_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, target_pool, target_pools_add_instance_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.AddInstanceTargetPoolRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AddInstanceTargetPoolRequest): + request = compute.AddInstanceTargetPoolRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_pool is not None: + request.target_pool = target_pool + if target_pools_add_instance_request_resource is not None: + request.target_pools_add_instance_request_resource = ( + target_pools_add_instance_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.add_instance] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def add_instance( + self, + request: Union[compute.AddInstanceTargetPoolRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_pool: str = None, + target_pools_add_instance_request_resource: compute.TargetPoolsAddInstanceRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Adds an instance to a target pool. + + Args: + request (Union[google.cloud.compute_v1.types.AddInstanceTargetPoolRequest, dict]): + The request object. A request message for + TargetPools.AddInstance. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pool (str): + Name of the TargetPool resource to + add instances to. + + This corresponds to the ``target_pool`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pools_add_instance_request_resource (google.cloud.compute_v1.types.TargetPoolsAddInstanceRequest): + The body resource for this request + This corresponds to the ``target_pools_add_instance_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -630,6 +839,31 @@ def add_instance_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -756,22 +990,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -814,9 +1035,9 @@ def delete_unary( # Done; return the response. return response - def get( + def delete( self, - request: Union[compute.GetTargetPoolRequest, dict] = None, + request: Union[compute.DeleteTargetPoolRequest, dict] = None, *, project: str = None, region: str = None, @@ -824,14 +1045,14 @@ def get( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.TargetPool: - r"""Returns the specified target pool. Gets a list of - available target pools by making a list() request. + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified target pool. Args: - request (Union[google.cloud.compute_v1.types.GetTargetPoolRequest, dict]): + request (Union[google.cloud.compute_v1.types.DeleteTargetPoolRequest, dict]): The request object. A request message for - TargetPools.Get. See the method description for details. + TargetPools.Delete. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -846,7 +1067,7 @@ def get( should not be set. target_pool (str): Name of the TargetPool resource to - return. + delete. This corresponds to the ``target_pool`` field on the ``request`` instance; if ``request`` is provided, this @@ -858,15 +1079,9 @@ def get( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.TargetPool: - Represents a Target Pool resource. - Target pools are used for network - TCP/UDP load balancing. A target pool - references member instances, an - associated legacy HttpHealthCheck - resource, and, optionally, a backup - target pool. For more information, read - Using target pools. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -880,11 +1095,11 @@ def get( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetTargetPoolRequest. + # in a compute.DeleteTargetPoolRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetTargetPoolRequest): - request = compute.GetTargetPoolRequest(request) + if not isinstance(request, compute.DeleteTargetPoolRequest): + request = compute.DeleteTargetPoolRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -896,7 +1111,7 @@ def get( # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get] + rpc = self._transport._wrapped_methods[self._transport.delete] # Send the request. response = rpc( @@ -906,27 +1121,147 @@ def get( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def get_health( + def get( self, - request: Union[compute.GetHealthTargetPoolRequest, dict] = None, + request: Union[compute.GetTargetPoolRequest, dict] = None, *, project: str = None, region: str = None, target_pool: str = None, - instance_reference_resource: compute.InstanceReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.TargetPoolInstanceHealth: - r"""Gets the most recent health check results for each IP - for the instance that is referenced by the given target - pool. + ) -> compute.TargetPool: + r"""Returns the specified target pool. Gets a list of + available target pools by making a list() request. Args: - request (Union[google.cloud.compute_v1.types.GetHealthTargetPoolRequest, dict]): + request (Union[google.cloud.compute_v1.types.GetTargetPoolRequest, dict]): + The request object. A request message for + TargetPools.Get. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pool (str): + Name of the TargetPool resource to + return. + + This corresponds to the ``target_pool`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.TargetPool: + Represents a Target Pool resource. + Target pools are used for network + TCP/UDP load balancing. A target pool + references member instances, an + associated legacy HttpHealthCheck + resource, and, optionally, a backup + target pool. For more information, read + Using target pools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_pool]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetTargetPoolRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetTargetPoolRequest): + request = compute.GetTargetPoolRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_pool is not None: + request.target_pool = target_pool + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_health( + self, + request: Union[compute.GetHealthTargetPoolRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_pool: str = None, + instance_reference_resource: compute.InstanceReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.TargetPoolInstanceHealth: + r"""Gets the most recent health check results for each IP + for the instance that is referenced by the given target + pool. + + Args: + request (Union[google.cloud.compute_v1.types.GetHealthTargetPoolRequest, dict]): The request object. A request message for TargetPools.GetHealth. See the method description for details. @@ -936,22 +1271,410 @@ def get_health( on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region scoping this - request. - + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pool (str): + Name of the TargetPool resource to + which the queried instance belongs. + + This corresponds to the ``target_pool`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + instance_reference_resource (google.cloud.compute_v1.types.InstanceReference): + The body resource for this request + This corresponds to the ``instance_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.types.TargetPoolInstanceHealth: + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, target_pool, instance_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.GetHealthTargetPoolRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetHealthTargetPoolRequest): + request = compute.GetHealthTargetPoolRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_pool is not None: + request.target_pool = target_pool + if instance_reference_resource is not None: + request.instance_reference_resource = instance_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_health] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert_unary( + self, + request: Union[compute.InsertTargetPoolRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_pool_resource: compute.TargetPool = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a target pool in the specified project and + region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetPoolRequest, dict]): + The request object. A request message for + TargetPools.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pool_resource (google.cloud.compute_v1.types.TargetPool): + The body resource for this request + This corresponds to the ``target_pool_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_pool_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetPoolRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetPoolRequest): + request = compute.InsertTargetPoolRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_pool_resource is not None: + request.target_pool_resource = target_pool_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertTargetPoolRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_pool_resource: compute.TargetPool = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a target pool in the specified project and + region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetPoolRequest, dict]): + The request object. A request message for + TargetPools.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pool_resource (google.cloud.compute_v1.types.TargetPool): + The body resource for this request + This corresponds to the ``target_pool_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_pool_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetPoolRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetPoolRequest): + request = compute.InsertTargetPoolRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_pool_resource is not None: + request.target_pool_resource = target_pool_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def list( + self, + request: Union[compute.ListTargetPoolsRequest, dict] = None, + *, + project: str = None, + region: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListPager: + r"""Retrieves a list of target pools available to the + specified project and region. + + Args: + request (Union[google.cloud.compute_v1.types.ListTargetPoolsRequest, dict]): + The request object. A request message for + TargetPools.List. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region scoping this + request. + + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.compute_v1.services.target_pools.pagers.ListPager: + Contains a list of TargetPool + resources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.ListTargetPoolsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListTargetPoolsRequest): + request = compute.ListTargetPoolsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def remove_health_check_unary( + self, + request: Union[compute.RemoveHealthCheckTargetPoolRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_pool: str = None, + target_pools_remove_health_check_request_resource: compute.TargetPoolsRemoveHealthCheckRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Removes health check URL from a target pool. + + Args: + request (Union[google.cloud.compute_v1.types.RemoveHealthCheckTargetPoolRequest, dict]): + The request object. A request message for + TargetPools.RemoveHealthCheck. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. target_pool (str): - Name of the TargetPool resource to - which the queried instance belongs. + Name of the target pool to remove + health checks from. This corresponds to the ``target_pool`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - instance_reference_resource (google.cloud.compute_v1.types.InstanceReference): + target_pools_remove_health_check_request_resource (google.cloud.compute_v1.types.TargetPoolsRemoveHealthCheckRequest): The body resource for this request - This corresponds to the ``instance_reference_resource`` field + This corresponds to the ``target_pools_remove_health_check_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -961,14 +1684,21 @@ def get_health( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.TargetPoolInstanceHealth: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [project, region, target_pool, instance_reference_resource] + [ + project, + region, + target_pool, + target_pools_remove_health_check_request_resource, + ] ) if request is not None and has_flattened_params: raise ValueError( @@ -977,11 +1707,11 @@ def get_health( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.GetHealthTargetPoolRequest. + # in a compute.RemoveHealthCheckTargetPoolRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.GetHealthTargetPoolRequest): - request = compute.GetHealthTargetPoolRequest(request) + if not isinstance(request, compute.RemoveHealthCheckTargetPoolRequest): + request = compute.RemoveHealthCheckTargetPoolRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -990,12 +1720,14 @@ def get_health( request.region = region if target_pool is not None: request.target_pool = target_pool - if instance_reference_resource is not None: - request.instance_reference_resource = instance_reference_resource + if target_pools_remove_health_check_request_resource is not None: + request.target_pools_remove_health_check_request_resource = ( + target_pools_remove_health_check_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_health] + rpc = self._transport._wrapped_methods[self._transport.remove_health_check] # Send the request. response = rpc( @@ -1008,40 +1740,45 @@ def get_health( # Done; return the response. return response - def insert_unary( + def remove_health_check( self, - request: Union[compute.InsertTargetPoolRequest, dict] = None, + request: Union[compute.RemoveHealthCheckTargetPoolRequest, dict] = None, *, project: str = None, region: str = None, - target_pool_resource: compute.TargetPool = None, + target_pool: str = None, + target_pools_remove_health_check_request_resource: compute.TargetPoolsRemoveHealthCheckRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Creates a target pool in the specified project and - region using the data included in the request. + ) -> extended_operation.ExtendedOperation: + r"""Removes health check URL from a target pool. Args: - request (Union[google.cloud.compute_v1.types.InsertTargetPoolRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveHealthCheckTargetPoolRequest, dict]): The request object. A request message for - TargetPools.Insert. See the method description for - details. + TargetPools.RemoveHealthCheck. See the method + description for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region scoping this - request. - + Name of the region for this request. This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_pool_resource (google.cloud.compute_v1.types.TargetPool): + target_pool (str): + Name of the target pool to remove + health checks from. + + This corresponds to the ``target_pool`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pools_remove_health_check_request_resource (google.cloud.compute_v1.types.TargetPoolsRemoveHealthCheckRequest): The body resource for this request - This corresponds to the ``target_pool_resource`` field + This corresponds to the ``target_pools_remove_health_check_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1051,28 +1788,22 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region, target_pool_resource]) + has_flattened_params = any( + [ + project, + region, + target_pool, + target_pools_remove_health_check_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1080,23 +1811,27 @@ def insert_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.InsertTargetPoolRequest. + # in a compute.RemoveHealthCheckTargetPoolRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.InsertTargetPoolRequest): - request = compute.InsertTargetPoolRequest(request) + if not isinstance(request, compute.RemoveHealthCheckTargetPoolRequest): + request = compute.RemoveHealthCheckTargetPoolRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region - if target_pool_resource is not None: - request.target_pool_resource = target_pool_resource + if target_pool is not None: + request.target_pool = target_pool + if target_pools_remove_health_check_request_resource is not None: + request.target_pools_remove_health_check_request_resource = ( + target_pools_remove_health_check_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.insert] + rpc = self._transport._wrapped_methods[self._transport.remove_health_check] # Send the request. response = rpc( @@ -1106,27 +1841,53 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def list( + def remove_instance_unary( self, - request: Union[compute.ListTargetPoolsRequest, dict] = None, + request: Union[compute.RemoveInstanceTargetPoolRequest, dict] = None, *, project: str = None, region: str = None, + target_pool: str = None, + target_pools_remove_instance_request_resource: compute.TargetPoolsRemoveInstanceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListPager: - r"""Retrieves a list of target pools available to the - specified project and region. + ) -> compute.Operation: + r"""Removes instance URL from a target pool. Args: - request (Union[google.cloud.compute_v1.types.ListTargetPoolsRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveInstanceTargetPoolRequest, dict]): The request object. A request message for - TargetPools.List. See the method description for - details. + TargetPools.RemoveInstance. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1139,6 +1900,18 @@ def list( This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. + target_pool (str): + Name of the TargetPool resource to + remove instances from. + + This corresponds to the ``target_pool`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_pools_remove_instance_request_resource (google.cloud.compute_v1.types.TargetPoolsRemoveInstanceRequest): + The body resource for this request + This corresponds to the ``target_pools_remove_instance_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1146,18 +1919,22 @@ def list( sent along with the request as metadata. Returns: - google.cloud.compute_v1.services.target_pools.pagers.ListPager: - Contains a list of TargetPool - resources. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. - has_flattened_params = any([project, region]) + has_flattened_params = any( + [ + project, + region, + target_pool, + target_pools_remove_instance_request_resource, + ] + ) if request is not None and has_flattened_params: raise ValueError( "If the `request` argument is set, then none of " @@ -1165,21 +1942,27 @@ def list( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.ListTargetPoolsRequest. + # in a compute.RemoveInstanceTargetPoolRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.ListTargetPoolsRequest): - request = compute.ListTargetPoolsRequest(request) + if not isinstance(request, compute.RemoveInstanceTargetPoolRequest): + request = compute.RemoveInstanceTargetPoolRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if region is not None: request.region = region + if target_pool is not None: + request.target_pool = target_pool + if target_pools_remove_instance_request_resource is not None: + request.target_pools_remove_instance_request_resource = ( + target_pools_remove_instance_request_resource + ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list] + rpc = self._transport._wrapped_methods[self._transport.remove_instance] # Send the request. response = rpc( @@ -1189,57 +1972,50 @@ def list( metadata=metadata, ) - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - # Done; return the response. return response - def remove_health_check_unary( + def remove_instance( self, - request: Union[compute.RemoveHealthCheckTargetPoolRequest, dict] = None, + request: Union[compute.RemoveInstanceTargetPoolRequest, dict] = None, *, project: str = None, region: str = None, target_pool: str = None, - target_pools_remove_health_check_request_resource: compute.TargetPoolsRemoveHealthCheckRequest = None, + target_pools_remove_instance_request_resource: compute.TargetPoolsRemoveInstanceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Removes health check URL from a target pool. + ) -> extended_operation.ExtendedOperation: + r"""Removes instance URL from a target pool. Args: - request (Union[google.cloud.compute_v1.types.RemoveHealthCheckTargetPoolRequest, dict]): + request (Union[google.cloud.compute_v1.types.RemoveInstanceTargetPoolRequest, dict]): The request object. A request message for - TargetPools.RemoveHealthCheck. See the method - description for details. + TargetPools.RemoveInstance. See the method description + for details. project (str): Project ID for this request. This corresponds to the ``project`` field on the ``request`` instance; if ``request`` is provided, this should not be set. region (str): - Name of the region for this request. + Name of the region scoping this + request. + This corresponds to the ``region`` field on the ``request`` instance; if ``request`` is provided, this should not be set. target_pool (str): - Name of the target pool to remove - health checks from. + Name of the TargetPool resource to + remove instances from. This corresponds to the ``target_pool`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_pools_remove_health_check_request_resource (google.cloud.compute_v1.types.TargetPoolsRemoveHealthCheckRequest): + target_pools_remove_instance_request_resource (google.cloud.compute_v1.types.TargetPoolsRemoveInstanceRequest): The body resource for this request - This corresponds to the ``target_pools_remove_health_check_request_resource`` field + This corresponds to the ``target_pools_remove_instance_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1249,22 +2025,9 @@ def remove_health_check_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1275,7 +2038,7 @@ def remove_health_check_unary( project, region, target_pool, - target_pools_remove_health_check_request_resource, + target_pools_remove_instance_request_resource, ] ) if request is not None and has_flattened_params: @@ -1285,11 +2048,11 @@ def remove_health_check_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveHealthCheckTargetPoolRequest. + # in a compute.RemoveInstanceTargetPoolRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.RemoveHealthCheckTargetPoolRequest): - request = compute.RemoveHealthCheckTargetPoolRequest(request) + if not isinstance(request, compute.RemoveInstanceTargetPoolRequest): + request = compute.RemoveInstanceTargetPoolRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1298,14 +2061,14 @@ def remove_health_check_unary( request.region = region if target_pool is not None: request.target_pool = target_pool - if target_pools_remove_health_check_request_resource is not None: - request.target_pools_remove_health_check_request_resource = ( - target_pools_remove_health_check_request_resource + if target_pools_remove_instance_request_resource is not None: + request.target_pools_remove_instance_request_resource = ( + target_pools_remove_instance_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_health_check] + rpc = self._transport._wrapped_methods[self._transport.remove_instance] # Send the request. response = rpc( @@ -1315,28 +2078,53 @@ def remove_health_check_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def remove_instance_unary( + def set_backup_unary( self, - request: Union[compute.RemoveInstanceTargetPoolRequest, dict] = None, + request: Union[compute.SetBackupTargetPoolRequest, dict] = None, *, project: str = None, region: str = None, target_pool: str = None, - target_pools_remove_instance_request_resource: compute.TargetPoolsRemoveInstanceRequest = None, + target_reference_resource: compute.TargetReference = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Removes instance URL from a target pool. + r"""Changes a backup target pool's configurations. Args: - request (Union[google.cloud.compute_v1.types.RemoveInstanceTargetPoolRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetBackupTargetPoolRequest, dict]): The request object. A request message for - TargetPools.RemoveInstance. See the method description - for details. + TargetPools.SetBackup. See the method description for + details. project (str): Project ID for this request. This corresponds to the ``project`` field @@ -1351,14 +2139,14 @@ def remove_instance_unary( should not be set. target_pool (str): Name of the TargetPool resource to - remove instances from. + set a backup pool for. This corresponds to the ``target_pool`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_pools_remove_instance_request_resource (google.cloud.compute_v1.types.TargetPoolsRemoveInstanceRequest): + target_reference_resource (google.cloud.compute_v1.types.TargetReference): The body resource for this request - This corresponds to the ``target_pools_remove_instance_request_resource`` field + This corresponds to the ``target_reference_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1368,34 +2156,16 @@ def remove_instance_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. # Quick check: If we got a request object, we should *not* have # gotten any keyword arguments that map to the request. has_flattened_params = any( - [ - project, - region, - target_pool, - target_pools_remove_instance_request_resource, - ] + [project, region, target_pool, target_reference_resource] ) if request is not None and has_flattened_params: raise ValueError( @@ -1404,11 +2174,11 @@ def remove_instance_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.RemoveInstanceTargetPoolRequest. + # in a compute.SetBackupTargetPoolRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.RemoveInstanceTargetPoolRequest): - request = compute.RemoveInstanceTargetPoolRequest(request) + if not isinstance(request, compute.SetBackupTargetPoolRequest): + request = compute.SetBackupTargetPoolRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: @@ -1417,14 +2187,12 @@ def remove_instance_unary( request.region = region if target_pool is not None: request.target_pool = target_pool - if target_pools_remove_instance_request_resource is not None: - request.target_pools_remove_instance_request_resource = ( - target_pools_remove_instance_request_resource - ) + if target_reference_resource is not None: + request.target_reference_resource = target_reference_resource # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.remove_instance] + rpc = self._transport._wrapped_methods[self._transport.set_backup] # Send the request. response = rpc( @@ -1437,7 +2205,7 @@ def remove_instance_unary( # Done; return the response. return response - def set_backup_unary( + def set_backup( self, request: Union[compute.SetBackupTargetPoolRequest, dict] = None, *, @@ -1448,7 +2216,7 @@ def set_backup_unary( retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: + ) -> extended_operation.ExtendedOperation: r"""Changes a backup target pool's configurations. Args: @@ -1487,22 +2255,9 @@ def set_backup_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1546,6 +2301,31 @@ def set_backup_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/target_pools/transports/base.py b/google/cloud/compute_v1/services/target_pools/transports/base.py index a6b3b24c2..d1a3df898 100644 --- a/google/cloud/compute_v1/services/target_pools/transports/base.py +++ b/google/cloud/compute_v1/services/target_pools/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -294,5 +297,21 @@ def set_backup( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetPoolsTransport",) diff --git a/google/cloud/compute_v1/services/target_pools/transports/rest.py b/google/cloud/compute_v1/services/target_pools/transports/rest.py index d98b7c00d..ab13a7768 100644 --- a/google/cloud/compute_v1/services/target_pools/transports/rest.py +++ b/google/cloud/compute_v1/services/target_pools/transports/rest.py @@ -1777,6 +1777,10 @@ def set_backup( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_ssl_proxies/client.py b/google/cloud/compute_v1/services/target_ssl_proxies/client.py index f219e09cf..95cd9e84a 100644 --- a/google/cloud/compute_v1/services/target_ssl_proxies/client.py +++ b/google/cloud/compute_v1/services/target_ssl_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_ssl_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetSslProxiesTransport, DEFAULT_CLIENT_INFO @@ -438,22 +441,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -494,6 +484,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteTargetSslProxyRequest, dict] = None, + *, + project: str = None, + target_ssl_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetSslProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetSslProxyRequest, dict]): + The request object. A request message for + TargetSslProxies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxy (str): + Name of the TargetSslProxy resource + to delete. + + This corresponds to the ``target_ssl_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_ssl_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetSslProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetSslProxyRequest): + request = compute.DeleteTargetSslProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_ssl_proxy is not None: + request.target_ssl_proxy = target_ssl_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetTargetSslProxyRequest, dict] = None, @@ -616,22 +709,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_ssl_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetSslProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetSslProxyRequest): + request = compute.InsertTargetSslProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_ssl_proxy_resource is not None: + request.target_ssl_proxy_resource = target_ssl_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertTargetSslProxyRequest, dict] = None, + *, + project: str = None, + target_ssl_proxy_resource: compute.TargetSslProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetSslProxy resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetSslProxyRequest, dict]): + The request object. A request message for + TargetSslProxies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxy_resource (google.cloud.compute_v1.types.TargetSslProxy): + The body resource for this request + This corresponds to the ``target_ssl_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -669,6 +827,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -797,22 +979,9 @@ def set_backend_service_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -863,23 +1032,23 @@ def set_backend_service_unary( # Done; return the response. return response - def set_proxy_header_unary( + def set_backend_service( self, - request: Union[compute.SetProxyHeaderTargetSslProxyRequest, dict] = None, + request: Union[compute.SetBackendServiceTargetSslProxyRequest, dict] = None, *, project: str = None, target_ssl_proxy: str = None, - target_ssl_proxies_set_proxy_header_request_resource: compute.TargetSslProxiesSetProxyHeaderRequest = None, + target_ssl_proxies_set_backend_service_request_resource: compute.TargetSslProxiesSetBackendServiceRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Changes the ProxyHeaderType for TargetSslProxy. + ) -> extended_operation.ExtendedOperation: + r"""Changes the BackendService for TargetSslProxy. Args: - request (Union[google.cloud.compute_v1.types.SetProxyHeaderTargetSslProxyRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetBackendServiceTargetSslProxyRequest, dict]): The request object. A request message for - TargetSslProxies.SetProxyHeader. See the method + TargetSslProxies.SetBackendService. See the method description for details. project (str): Project ID for this request. @@ -888,14 +1057,15 @@ def set_proxy_header_unary( should not be set. target_ssl_proxy (str): Name of the TargetSslProxy resource - whose ProxyHeader is to be set. + whose BackendService resource is to be + set. This corresponds to the ``target_ssl_proxy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_ssl_proxies_set_proxy_header_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetProxyHeaderRequest): + target_ssl_proxies_set_backend_service_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetBackendServiceRequest): The body resource for this request - This corresponds to the ``target_ssl_proxies_set_proxy_header_request_resource`` field + This corresponds to the ``target_ssl_proxies_set_backend_service_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -905,22 +1075,9 @@ def set_proxy_header_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -930,7 +1087,7 @@ def set_proxy_header_unary( [ project, target_ssl_proxy, - target_ssl_proxies_set_proxy_header_request_resource, + target_ssl_proxies_set_backend_service_request_resource, ] ) if request is not None and has_flattened_params: @@ -940,25 +1097,25 @@ def set_proxy_header_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetProxyHeaderTargetSslProxyRequest. + # in a compute.SetBackendServiceTargetSslProxyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetProxyHeaderTargetSslProxyRequest): - request = compute.SetProxyHeaderTargetSslProxyRequest(request) + if not isinstance(request, compute.SetBackendServiceTargetSslProxyRequest): + request = compute.SetBackendServiceTargetSslProxyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if target_ssl_proxy is not None: request.target_ssl_proxy = target_ssl_proxy - if target_ssl_proxies_set_proxy_header_request_resource is not None: - request.target_ssl_proxies_set_proxy_header_request_resource = ( - target_ssl_proxies_set_proxy_header_request_resource + if target_ssl_proxies_set_backend_service_request_resource is not None: + request.target_ssl_proxies_set_backend_service_request_resource = ( + target_ssl_proxies_set_backend_service_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_proxy_header] + rpc = self._transport._wrapped_methods[self._transport.set_backend_service] # Send the request. response = rpc( @@ -968,26 +1125,50 @@ def set_proxy_header_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response - def set_ssl_certificates_unary( + def set_proxy_header_unary( self, - request: Union[compute.SetSslCertificatesTargetSslProxyRequest, dict] = None, + request: Union[compute.SetProxyHeaderTargetSslProxyRequest, dict] = None, *, project: str = None, target_ssl_proxy: str = None, - target_ssl_proxies_set_ssl_certificates_request_resource: compute.TargetSslProxiesSetSslCertificatesRequest = None, + target_ssl_proxies_set_proxy_header_request_resource: compute.TargetSslProxiesSetProxyHeaderRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), ) -> compute.Operation: - r"""Changes SslCertificates for TargetSslProxy. + r"""Changes the ProxyHeaderType for TargetSslProxy. Args: - request (Union[google.cloud.compute_v1.types.SetSslCertificatesTargetSslProxyRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetProxyHeaderTargetSslProxyRequest, dict]): The request object. A request message for - TargetSslProxies.SetSslCertificates. See the method + TargetSslProxies.SetProxyHeader. See the method description for details. project (str): Project ID for this request. @@ -996,15 +1177,14 @@ def set_ssl_certificates_unary( should not be set. target_ssl_proxy (str): Name of the TargetSslProxy resource - whose SslCertificate resource is to be - set. + whose ProxyHeader is to be set. This corresponds to the ``target_ssl_proxy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - target_ssl_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetSslCertificatesRequest): + target_ssl_proxies_set_proxy_header_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetProxyHeaderRequest): The body resource for this request - This corresponds to the ``target_ssl_proxies_set_ssl_certificates_request_resource`` field + This corresponds to the ``target_ssl_proxies_set_proxy_header_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1014,22 +1194,9 @@ def set_ssl_certificates_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1039,7 +1206,7 @@ def set_ssl_certificates_unary( [ project, target_ssl_proxy, - target_ssl_proxies_set_ssl_certificates_request_resource, + target_ssl_proxies_set_proxy_header_request_resource, ] ) if request is not None and has_flattened_params: @@ -1049,25 +1216,25 @@ def set_ssl_certificates_unary( ) # Minor optimization to avoid making a copy if the user passes - # in a compute.SetSslCertificatesTargetSslProxyRequest. + # in a compute.SetProxyHeaderTargetSslProxyRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, compute.SetSslCertificatesTargetSslProxyRequest): - request = compute.SetSslCertificatesTargetSslProxyRequest(request) + if not isinstance(request, compute.SetProxyHeaderTargetSslProxyRequest): + request = compute.SetProxyHeaderTargetSslProxyRequest(request) # If we have keyword arguments corresponding to fields on the # request, apply these. if project is not None: request.project = project if target_ssl_proxy is not None: request.target_ssl_proxy = target_ssl_proxy - if target_ssl_proxies_set_ssl_certificates_request_resource is not None: - request.target_ssl_proxies_set_ssl_certificates_request_resource = ( - target_ssl_proxies_set_ssl_certificates_request_resource + if target_ssl_proxies_set_proxy_header_request_resource is not None: + request.target_ssl_proxies_set_proxy_header_request_resource = ( + target_ssl_proxies_set_proxy_header_request_resource ) # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + rpc = self._transport._wrapped_methods[self._transport.set_proxy_header] # Send the request. response = rpc( @@ -1080,27 +1247,23 @@ def set_ssl_certificates_unary( # Done; return the response. return response - def set_ssl_policy_unary( + def set_proxy_header( self, - request: Union[compute.SetSslPolicyTargetSslProxyRequest, dict] = None, + request: Union[compute.SetProxyHeaderTargetSslProxyRequest, dict] = None, *, project: str = None, target_ssl_proxy: str = None, - ssl_policy_reference_resource: compute.SslPolicyReference = None, + target_ssl_proxies_set_proxy_header_request_resource: compute.TargetSslProxiesSetProxyHeaderRequest = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: float = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> compute.Operation: - r"""Sets the SSL policy for TargetSslProxy. The SSL - policy specifies the server-side support for SSL - features. This affects connections between clients and - the SSL proxy load balancer. They do not affect the - connection between the load balancer and the backends. + ) -> extended_operation.ExtendedOperation: + r"""Changes the ProxyHeaderType for TargetSslProxy. Args: - request (Union[google.cloud.compute_v1.types.SetSslPolicyTargetSslProxyRequest, dict]): + request (Union[google.cloud.compute_v1.types.SetProxyHeaderTargetSslProxyRequest, dict]): The request object. A request message for - TargetSslProxies.SetSslPolicy. See the method + TargetSslProxies.SetProxyHeader. See the method description for details. project (str): Project ID for this request. @@ -1109,16 +1272,14 @@ def set_ssl_policy_unary( should not be set. target_ssl_proxy (str): Name of the TargetSslProxy resource - whose SSL policy is to be set. The name - must be 1-63 characters long, and comply - with RFC1035. + whose ProxyHeader is to be set. This corresponds to the ``target_ssl_proxy`` field on the ``request`` instance; if ``request`` is provided, this should not be set. - ssl_policy_reference_resource (google.cloud.compute_v1.types.SslPolicyReference): + target_ssl_proxies_set_proxy_header_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetProxyHeaderRequest): The body resource for this request - This corresponds to the ``ssl_policy_reference_resource`` field + This corresponds to the ``target_ssl_proxies_set_proxy_header_request_resource`` field on the ``request`` instance; if ``request`` is provided, this should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1128,22 +1289,350 @@ def set_ssl_policy_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_ssl_proxy, + target_ssl_proxies_set_proxy_header_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetProxyHeaderTargetSslProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetProxyHeaderTargetSslProxyRequest): + request = compute.SetProxyHeaderTargetSslProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_ssl_proxy is not None: + request.target_ssl_proxy = target_ssl_proxy + if target_ssl_proxies_set_proxy_header_request_resource is not None: + request.target_ssl_proxies_set_proxy_header_request_resource = ( + target_ssl_proxies_set_proxy_header_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_proxy_header] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_ssl_certificates_unary( + self, + request: Union[compute.SetSslCertificatesTargetSslProxyRequest, dict] = None, + *, + project: str = None, + target_ssl_proxy: str = None, + target_ssl_proxies_set_ssl_certificates_request_resource: compute.TargetSslProxiesSetSslCertificatesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Changes SslCertificates for TargetSslProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslCertificatesTargetSslProxyRequest, dict]): + The request object. A request message for + TargetSslProxies.SetSslCertificates. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxy (str): + Name of the TargetSslProxy resource + whose SslCertificate resource is to be + set. + + This corresponds to the ``target_ssl_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetSslCertificatesRequest): + The body resource for this request + This corresponds to the ``target_ssl_proxies_set_ssl_certificates_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_ssl_proxy, + target_ssl_proxies_set_ssl_certificates_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslCertificatesTargetSslProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetSslCertificatesTargetSslProxyRequest): + request = compute.SetSslCertificatesTargetSslProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_ssl_proxy is not None: + request.target_ssl_proxy = target_ssl_proxy + if target_ssl_proxies_set_ssl_certificates_request_resource is not None: + request.target_ssl_proxies_set_ssl_certificates_request_resource = ( + target_ssl_proxies_set_ssl_certificates_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_ssl_certificates( + self, + request: Union[compute.SetSslCertificatesTargetSslProxyRequest, dict] = None, + *, + project: str = None, + target_ssl_proxy: str = None, + target_ssl_proxies_set_ssl_certificates_request_resource: compute.TargetSslProxiesSetSslCertificatesRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes SslCertificates for TargetSslProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslCertificatesTargetSslProxyRequest, dict]): + The request object. A request message for + TargetSslProxies.SetSslCertificates. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxy (str): + Name of the TargetSslProxy resource + whose SslCertificate resource is to be + set. + + This corresponds to the ``target_ssl_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxies_set_ssl_certificates_request_resource (google.cloud.compute_v1.types.TargetSslProxiesSetSslCertificatesRequest): + The body resource for this request + This corresponds to the ``target_ssl_proxies_set_ssl_certificates_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_ssl_proxy, + target_ssl_proxies_set_ssl_certificates_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslCertificatesTargetSslProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetSslCertificatesTargetSslProxyRequest): + request = compute.SetSslCertificatesTargetSslProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_ssl_proxy is not None: + request.target_ssl_proxy = target_ssl_proxy + if target_ssl_proxies_set_ssl_certificates_request_resource is not None: + request.target_ssl_proxies_set_ssl_certificates_request_resource = ( + target_ssl_proxies_set_ssl_certificates_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_certificates] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + + def set_ssl_policy_unary( + self, + request: Union[compute.SetSslPolicyTargetSslProxyRequest, dict] = None, + *, + project: str = None, + target_ssl_proxy: str = None, + ssl_policy_reference_resource: compute.SslPolicyReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Sets the SSL policy for TargetSslProxy. The SSL + policy specifies the server-side support for SSL + features. This affects connections between clients and + the SSL proxy load balancer. They do not affect the + connection between the load balancer and the backends. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslPolicyTargetSslProxyRequest, dict]): + The request object. A request message for + TargetSslProxies.SetSslPolicy. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxy (str): + Name of the TargetSslProxy resource + whose SSL policy is to be set. The name + must be 1-63 characters long, and comply + with RFC1035. + + This corresponds to the ``target_ssl_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy_reference_resource (google.cloud.compute_v1.types.SslPolicyReference): + The body resource for this request + This corresponds to the ``ssl_policy_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1188,6 +1677,125 @@ def set_ssl_policy_unary( # Done; return the response. return response + def set_ssl_policy( + self, + request: Union[compute.SetSslPolicyTargetSslProxyRequest, dict] = None, + *, + project: str = None, + target_ssl_proxy: str = None, + ssl_policy_reference_resource: compute.SslPolicyReference = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the SSL policy for TargetSslProxy. The SSL + policy specifies the server-side support for SSL + features. This affects connections between clients and + the SSL proxy load balancer. They do not affect the + connection between the load balancer and the backends. + + Args: + request (Union[google.cloud.compute_v1.types.SetSslPolicyTargetSslProxyRequest, dict]): + The request object. A request message for + TargetSslProxies.SetSslPolicy. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_ssl_proxy (str): + Name of the TargetSslProxy resource + whose SSL policy is to be set. The name + must be 1-63 characters long, and comply + with RFC1035. + + This corresponds to the ``target_ssl_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + ssl_policy_reference_resource (google.cloud.compute_v1.types.SslPolicyReference): + The body resource for this request + This corresponds to the ``ssl_policy_reference_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, target_ssl_proxy, ssl_policy_reference_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetSslPolicyTargetSslProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetSslPolicyTargetSslProxyRequest): + request = compute.SetSslPolicyTargetSslProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_ssl_proxy is not None: + request.target_ssl_proxy = target_ssl_proxy + if ssl_policy_reference_resource is not None: + request.ssl_policy_reference_resource = ssl_policy_reference_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_ssl_policy] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def __enter__(self): return self diff --git a/google/cloud/compute_v1/services/target_ssl_proxies/transports/base.py b/google/cloud/compute_v1/services/target_ssl_proxies/transports/base.py index 833ebb44f..0fef507c7 100644 --- a/google/cloud/compute_v1/services/target_ssl_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/target_ssl_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -246,5 +249,21 @@ def set_ssl_policy( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetSslProxiesTransport",) diff --git a/google/cloud/compute_v1/services/target_ssl_proxies/transports/rest.py b/google/cloud/compute_v1/services/target_ssl_proxies/transports/rest.py index f3fc54393..1f281927e 100644 --- a/google/cloud/compute_v1/services/target_ssl_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/target_ssl_proxies/transports/rest.py @@ -1386,6 +1386,10 @@ def set_ssl_policy( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_tcp_proxies/client.py b/google/cloud/compute_v1/services/target_tcp_proxies/client.py index 744143ed4..4c34c7994 100644 --- a/google/cloud/compute_v1/services/target_tcp_proxies/client.py +++ b/google/cloud/compute_v1/services/target_tcp_proxies/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_tcp_proxies import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetTcpProxiesTransport, DEFAULT_CLIENT_INFO @@ -438,22 +441,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -494,6 +484,109 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + target_tcp_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified TargetTcpProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetTcpProxyRequest, dict]): + The request object. A request message for + TargetTcpProxies.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_tcp_proxy (str): + Name of the TargetTcpProxy resource + to delete. + + This corresponds to the ``target_tcp_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_tcp_proxy]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetTcpProxyRequest): + request = compute.DeleteTargetTcpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_tcp_proxy is not None: + request.target_tcp_proxy = target_tcp_proxy + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetTargetTcpProxyRequest, dict] = None, @@ -616,22 +709,87 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, target_tcp_proxy_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetTcpProxyRequest): + request = compute.InsertTargetTcpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_tcp_proxy_resource is not None: + request.target_tcp_proxy_resource = target_tcp_proxy_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + target_tcp_proxy_resource: compute.TargetTcpProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a TargetTcpProxy resource in the specified + project using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetTcpProxyRequest, dict]): + The request object. A request message for + TargetTcpProxies.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_tcp_proxy_resource (google.cloud.compute_v1.types.TargetTcpProxy): + The body resource for this request + This corresponds to the ``target_tcp_proxy_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -669,6 +827,30 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -797,22 +979,105 @@ def set_backend_service_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_tcp_proxy, + target_tcp_proxies_set_backend_service_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetBackendServiceTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetBackendServiceTargetTcpProxyRequest): + request = compute.SetBackendServiceTargetTcpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_tcp_proxy is not None: + request.target_tcp_proxy = target_tcp_proxy + if target_tcp_proxies_set_backend_service_request_resource is not None: + request.target_tcp_proxies_set_backend_service_request_resource = ( + target_tcp_proxies_set_backend_service_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_backend_service] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_backend_service( + self, + request: Union[compute.SetBackendServiceTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + target_tcp_proxy: str = None, + target_tcp_proxies_set_backend_service_request_resource: compute.TargetTcpProxiesSetBackendServiceRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the BackendService for TargetTcpProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetBackendServiceTargetTcpProxyRequest, dict]): + The request object. A request message for + TargetTcpProxies.SetBackendService. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_tcp_proxy (str): + Name of the TargetTcpProxy resource + whose BackendService resource is to be + set. + + This corresponds to the ``target_tcp_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_tcp_proxies_set_backend_service_request_resource (google.cloud.compute_v1.types.TargetTcpProxiesSetBackendServiceRequest): + The body resource for this request + This corresponds to the ``target_tcp_proxies_set_backend_service_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -860,6 +1125,30 @@ def set_backend_service_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -905,22 +1194,104 @@ def set_proxy_header_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [ + project, + target_tcp_proxy, + target_tcp_proxies_set_proxy_header_request_resource, + ] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetProxyHeaderTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetProxyHeaderTargetTcpProxyRequest): + request = compute.SetProxyHeaderTargetTcpProxyRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if target_tcp_proxy is not None: + request.target_tcp_proxy = target_tcp_proxy + if target_tcp_proxies_set_proxy_header_request_resource is not None: + request.target_tcp_proxies_set_proxy_header_request_resource = ( + target_tcp_proxies_set_proxy_header_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_proxy_header] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_proxy_header( + self, + request: Union[compute.SetProxyHeaderTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + target_tcp_proxy: str = None, + target_tcp_proxies_set_proxy_header_request_resource: compute.TargetTcpProxiesSetProxyHeaderRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Changes the ProxyHeaderType for TargetTcpProxy. + + Args: + request (Union[google.cloud.compute_v1.types.SetProxyHeaderTargetTcpProxyRequest, dict]): + The request object. A request message for + TargetTcpProxies.SetProxyHeader. See the method + description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_tcp_proxy (str): + Name of the TargetTcpProxy resource + whose ProxyHeader is to be set. + + This corresponds to the ``target_tcp_proxy`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_tcp_proxies_set_proxy_header_request_resource (google.cloud.compute_v1.types.TargetTcpProxiesSetProxyHeaderRequest): + The body resource for this request + This corresponds to the ``target_tcp_proxies_set_proxy_header_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -968,6 +1339,30 @@ def set_proxy_header_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/target_tcp_proxies/transports/base.py b/google/cloud/compute_v1/services/target_tcp_proxies/transports/base.py index bb4da930a..89ea75337 100644 --- a/google/cloud/compute_v1/services/target_tcp_proxies/transports/base.py +++ b/google/cloud/compute_v1/services/target_tcp_proxies/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -218,5 +221,21 @@ def set_proxy_header( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetTcpProxiesTransport",) diff --git a/google/cloud/compute_v1/services/target_tcp_proxies/transports/rest.py b/google/cloud/compute_v1/services/target_tcp_proxies/transports/rest.py index 4d6b5cadd..0546f04b8 100644 --- a/google/cloud/compute_v1/services/target_tcp_proxies/transports/rest.py +++ b/google/cloud/compute_v1/services/target_tcp_proxies/transports/rest.py @@ -1068,6 +1068,10 @@ def set_proxy_header( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/target_vpn_gateways/client.py b/google/cloud/compute_v1/services/target_vpn_gateways/client.py index e61506c0f..de6cb9678 100644 --- a/google/cloud/compute_v1/services/target_vpn_gateways/client.py +++ b/google/cloud/compute_v1/services/target_vpn_gateways/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.target_vpn_gateways import pagers from google.cloud.compute_v1.types import compute from .transports.base import TargetVpnGatewaysTransport, DEFAULT_CLIENT_INFO @@ -523,22 +526,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -581,6 +571,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteTargetVpnGatewayRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_vpn_gateway: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified target VPN gateway. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteTargetVpnGatewayRequest, dict]): + The request object. A request message for + TargetVpnGateways.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_vpn_gateway (str): + Name of the target VPN gateway to + delete. + + This corresponds to the ``target_vpn_gateway`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_vpn_gateway]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteTargetVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteTargetVpnGatewayRequest): + request = compute.DeleteTargetVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_vpn_gateway is not None: + request.target_vpn_gateway = target_vpn_gateway + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetTargetVpnGatewayRequest, dict] = None, @@ -714,22 +816,95 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, target_vpn_gateway_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertTargetVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertTargetVpnGatewayRequest): + request = compute.InsertTargetVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if target_vpn_gateway_resource is not None: + request.target_vpn_gateway_resource = target_vpn_gateway_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertTargetVpnGatewayRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_vpn_gateway_resource: compute.TargetVpnGateway = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a target VPN gateway in the specified project + and region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertTargetVpnGatewayRequest, dict]): + The request object. A request message for + TargetVpnGateways.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + target_vpn_gateway_resource (google.cloud.compute_v1.types.TargetVpnGateway): + The body resource for this request + This corresponds to the ``target_vpn_gateway_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -769,6 +944,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/target_vpn_gateways/transports/base.py b/google/cloud/compute_v1/services/target_vpn_gateways/transports/base.py index c85bb77f6..d2a5c07fe 100644 --- a/google/cloud/compute_v1/services/target_vpn_gateways/transports/base.py +++ b/google/cloud/compute_v1/services/target_vpn_gateways/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -207,5 +210,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("TargetVpnGatewaysTransport",) diff --git a/google/cloud/compute_v1/services/target_vpn_gateways/transports/rest.py b/google/cloud/compute_v1/services/target_vpn_gateways/transports/rest.py index 0476cdbb3..d2dd3ea22 100644 --- a/google/cloud/compute_v1/services/target_vpn_gateways/transports/rest.py +++ b/google/cloud/compute_v1/services/target_vpn_gateways/transports/rest.py @@ -881,6 +881,10 @@ def list( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/url_maps/client.py b/google/cloud/compute_v1/services/url_maps/client.py index b7e407d05..0695fd3ee 100644 --- a/google/cloud/compute_v1/services/url_maps/client.py +++ b/google/cloud/compute_v1/services/url_maps/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.url_maps import pagers from google.cloud.compute_v1.types import compute from .transports.base import UrlMapsTransport, DEFAULT_CLIENT_INFO @@ -517,22 +520,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -573,6 +563,108 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteUrlMapRequest, dict] = None, + *, + project: str = None, + url_map: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified UrlMap resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteUrlMapRequest, dict]): + The request object. A request message for + UrlMaps.Delete. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap resource to + delete. + + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, url_map]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteUrlMapRequest): + request = compute.DeleteUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if url_map is not None: + request.url_map = url_map + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetUrlMapRequest, dict] = None, @@ -705,22 +797,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -761,6 +840,107 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertUrlMapRequest, dict] = None, + *, + project: str = None, + url_map_resource: compute.UrlMap = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a UrlMap resource in the specified project + using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertUrlMapRequest, dict]): + The request object. A request message for + UrlMaps.Insert. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_resource (google.cloud.compute_v1.types.UrlMap): + The body resource for this request + This corresponds to the ``url_map_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, url_map_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertUrlMapRequest): + request = compute.InsertUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if url_map_resource is not None: + request.url_map_resource = url_map_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def invalidate_cache_unary( self, request: Union[compute.InvalidateCacheUrlMapRequest, dict] = None, @@ -806,22 +986,9 @@ def invalidate_cache_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -866,6 +1033,122 @@ def invalidate_cache_unary( # Done; return the response. return response + def invalidate_cache( + self, + request: Union[compute.InvalidateCacheUrlMapRequest, dict] = None, + *, + project: str = None, + url_map: str = None, + cache_invalidation_rule_resource: compute.CacheInvalidationRule = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Initiates a cache invalidation operation, invalidating the + specified path, scoped to the specified UrlMap. For more + information, see `Invalidating cached + content `__. + + Args: + request (Union[google.cloud.compute_v1.types.InvalidateCacheUrlMapRequest, dict]): + The request object. A request message for + UrlMaps.InvalidateCache. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap scoping this + request. + + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + cache_invalidation_rule_resource (google.cloud.compute_v1.types.CacheInvalidationRule): + The body resource for this request + This corresponds to the ``cache_invalidation_rule_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, url_map, cache_invalidation_rule_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InvalidateCacheUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InvalidateCacheUrlMapRequest): + request = compute.InvalidateCacheUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if url_map is not None: + request.url_map = url_map + if cache_invalidation_rule_resource is not None: + request.cache_invalidation_rule_resource = ( + cache_invalidation_rule_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.invalidate_cache] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListUrlMapsRequest, dict] = None, @@ -988,22 +1271,96 @@ def patch_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, url_map, url_map_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.PatchUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchUrlMapRequest): + request = compute.PatchUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if url_map is not None: + request.url_map = url_map + if url_map_resource is not None: + request.url_map_resource = url_map_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.patch] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchUrlMapRequest, dict] = None, + *, + project: str = None, + url_map: str = None, + url_map_resource: compute.UrlMap = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Patches the specified UrlMap resource with the data + included in the request. This method supports PATCH + semantics and uses the JSON merge patch format and + processing rules. + + Args: + request (Union[google.cloud.compute_v1.types.PatchUrlMapRequest, dict]): + The request object. A request message for UrlMaps.Patch. + See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap resource to patch. + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_resource (google.cloud.compute_v1.types.UrlMap): + The body resource for this request + This corresponds to the ``url_map_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1043,6 +1400,30 @@ def patch_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response @@ -1088,22 +1469,96 @@ def update_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, url_map, url_map_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.UpdateUrlMapRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.UpdateUrlMapRequest): + request = compute.UpdateUrlMapRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if url_map is not None: + request.url_map = url_map + if url_map_resource is not None: + request.url_map_resource = url_map_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update( + self, + request: Union[compute.UpdateUrlMapRequest, dict] = None, + *, + project: str = None, + url_map: str = None, + url_map_resource: compute.UrlMap = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Updates the specified UrlMap resource with the data + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.UpdateUrlMapRequest, dict]): + The request object. A request message for + UrlMaps.Update. See the method description for details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map (str): + Name of the UrlMap resource to + update. + + This corresponds to the ``url_map`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + url_map_resource (google.cloud.compute_v1.types.UrlMap): + The body resource for this request + This corresponds to the ``url_map_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1143,6 +1598,30 @@ def update_unary( metadata=metadata, ) + operation_service = self._transport._global_operations_client + operation_request = compute.GetGlobalOperationRequest() + operation_request.project = request.project + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/url_maps/transports/base.py b/google/cloud/compute_v1/services/url_maps/transports/base.py index 5836fd0ca..abfef4137 100644 --- a/google/cloud/compute_v1/services/url_maps/transports/base.py +++ b/google/cloud/compute_v1/services/url_maps/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import global_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -261,5 +264,21 @@ def validate( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _global_operations_client(self) -> global_operations.GlobalOperationsClient: + ex_op_service = self._extended_operations_services.get("global_operations") + if not ex_op_service: + ex_op_service = global_operations.GlobalOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["global_operations"] = ex_op_service + + return ex_op_service + __all__ = ("UrlMapsTransport",) diff --git a/google/cloud/compute_v1/services/url_maps/transports/rest.py b/google/cloud/compute_v1/services/url_maps/transports/rest.py index 4d90d978e..fc62d5cc8 100644 --- a/google/cloud/compute_v1/services/url_maps/transports/rest.py +++ b/google/cloud/compute_v1/services/url_maps/transports/rest.py @@ -1446,6 +1446,10 @@ def validate( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/vpn_gateways/client.py b/google/cloud/compute_v1/services/vpn_gateways/client.py index 194906e3b..6b6e09b36 100644 --- a/google/cloud/compute_v1/services/vpn_gateways/client.py +++ b/google/cloud/compute_v1/services/vpn_gateways/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.vpn_gateways import pagers from google.cloud.compute_v1.types import compute from .transports.base import VpnGatewaysTransport, DEFAULT_CLIENT_INFO @@ -519,22 +522,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -577,6 +567,116 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteVpnGatewayRequest, dict] = None, + *, + project: str = None, + region: str = None, + vpn_gateway: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified VPN gateway. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteVpnGatewayRequest, dict]): + The request object. A request message for + VpnGateways.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + vpn_gateway (str): + Name of the VPN gateway to delete. + This corresponds to the ``vpn_gateway`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, vpn_gateway]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteVpnGatewayRequest): + request = compute.DeleteVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if vpn_gateway is not None: + request.vpn_gateway = vpn_gateway + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetVpnGatewayRequest, dict] = None, @@ -793,22 +893,9 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -851,6 +938,117 @@ def insert_unary( # Done; return the response. return response + def insert( + self, + request: Union[compute.InsertVpnGatewayRequest, dict] = None, + *, + project: str = None, + region: str = None, + vpn_gateway_resource: compute.VpnGateway = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a VPN gateway in the specified project and + region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertVpnGatewayRequest, dict]): + The request object. A request message for + VpnGateways.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + vpn_gateway_resource (google.cloud.compute_v1.types.VpnGateway): + The body resource for this request + This corresponds to the ``vpn_gateway_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, vpn_gateway_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertVpnGatewayRequest): + request = compute.InsertVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if vpn_gateway_resource is not None: + request.vpn_gateway_resource = vpn_gateway_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def list( self, request: Union[compute.ListVpnGatewaysRequest, dict] = None, @@ -990,22 +1188,9 @@ def set_labels_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -1054,6 +1239,131 @@ def set_labels_unary( # Done; return the response. return response + def set_labels( + self, + request: Union[compute.SetLabelsVpnGatewayRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource: str = None, + region_set_labels_request_resource: compute.RegionSetLabelsRequest = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Sets the labels on a VpnGateway. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsVpnGatewayRequest, dict]): + The request object. A request message for + VpnGateways.SetLabels. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + The region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + resource (str): + Name or id of the resource for this + request. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + This corresponds to the ``region_set_labels_request_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [project, region, resource, region_set_labels_request_resource] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.SetLabelsVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsVpnGatewayRequest): + request = compute.SetLabelsVpnGatewayRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if resource is not None: + request.resource = resource + if region_set_labels_request_resource is not None: + request.region_set_labels_request_resource = ( + region_set_labels_request_resource + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_labels] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def test_iam_permissions( self, request: Union[compute.TestIamPermissionsVpnGatewayRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/vpn_gateways/transports/base.py b/google/cloud/compute_v1/services/vpn_gateways/transports/base.py index 5427ed05a..11a9c48c2 100644 --- a/google/cloud/compute_v1/services/vpn_gateways/transports/base.py +++ b/google/cloud/compute_v1/services/vpn_gateways/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -254,5 +257,21 @@ def test_iam_permissions( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("VpnGatewaysTransport",) diff --git a/google/cloud/compute_v1/services/vpn_gateways/transports/rest.py b/google/cloud/compute_v1/services/vpn_gateways/transports/rest.py index eb4c979cd..f7385485f 100644 --- a/google/cloud/compute_v1/services/vpn_gateways/transports/rest.py +++ b/google/cloud/compute_v1/services/vpn_gateways/transports/rest.py @@ -1295,6 +1295,10 @@ def test_iam_permissions( # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/vpn_tunnels/client.py b/google/cloud/compute_v1/services/vpn_tunnels/client.py index 0f725d1cc..8e47b27e5 100644 --- a/google/cloud/compute_v1/services/vpn_tunnels/client.py +++ b/google/cloud/compute_v1/services/vpn_tunnels/client.py @@ -14,13 +14,15 @@ # limitations under the License. # from collections import OrderedDict +import functools import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore @@ -34,6 +36,7 @@ except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore +from google.api_core import extended_operation # type: ignore from google.cloud.compute_v1.services.vpn_tunnels import pagers from google.cloud.compute_v1.types import compute from .transports.base import VpnTunnelsTransport, DEFAULT_CLIENT_INFO @@ -521,22 +524,9 @@ def delete_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -579,6 +569,118 @@ def delete_unary( # Done; return the response. return response + def delete( + self, + request: Union[compute.DeleteVpnTunnelRequest, dict] = None, + *, + project: str = None, + region: str = None, + vpn_tunnel: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Deletes the specified VpnTunnel resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteVpnTunnelRequest, dict]): + The request object. A request message for + VpnTunnels.Delete. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + vpn_tunnel (str): + Name of the VpnTunnel resource to + delete. + + This corresponds to the ``vpn_tunnel`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, vpn_tunnel]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.DeleteVpnTunnelRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteVpnTunnelRequest): + request = compute.DeleteVpnTunnelRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if vpn_tunnel is not None: + request.vpn_tunnel = vpn_tunnel + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + + # Done; return the response. + return response + def get( self, request: Union[compute.GetVpnTunnelRequest, dict] = None, @@ -708,22 +810,95 @@ def insert_unary( sent along with the request as metadata. Returns: - google.cloud.compute_v1.types.Operation: - Represents an Operation resource. Google Compute Engine - has three Operation resources: \* - [Global](/compute/docs/reference/rest/v1/globalOperations) - \* - [Regional](/compute/docs/reference/rest/v1/regionOperations) - \* - [Zonal](/compute/docs/reference/rest/v1/zoneOperations) - You can use an operation resource to manage asynchronous - API requests. For more information, read Handling API - responses. Operations can be global, regional or zonal. - - For global operations, use the globalOperations - resource. - For regional operations, use the - regionOperations resource. - For zonal operations, use - the zonalOperations resource. For more information, read - Global, Regional, and Zonal Resources. + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([project, region, vpn_tunnel_resource]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a compute.InsertVpnTunnelRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertVpnTunnelRequest): + request = compute.InsertVpnTunnelRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if project is not None: + request.project = project + if region is not None: + request.region = region + if vpn_tunnel_resource is not None: + request.vpn_tunnel_resource = vpn_tunnel_resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.insert] + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertVpnTunnelRequest, dict] = None, + *, + project: str = None, + region: str = None, + vpn_tunnel_resource: compute.VpnTunnel = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> extended_operation.ExtendedOperation: + r"""Creates a VpnTunnel resource in the specified project + and region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertVpnTunnelRequest, dict]): + The request object. A request message for + VpnTunnels.Insert. See the method description for + details. + project (str): + Project ID for this request. + This corresponds to the ``project`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + region (str): + Name of the region for this request. + This corresponds to the ``region`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + vpn_tunnel_resource (google.cloud.compute_v1.types.VpnTunnel): + The body resource for this request + This corresponds to the ``vpn_tunnel_resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.extended_operation.ExtendedOperation: + An object representing a extended + long-running operation. """ # Create or coerce a protobuf request object. @@ -763,6 +938,31 @@ def insert_unary( metadata=metadata, ) + operation_service = self._transport._region_operations_client + operation_request = compute.GetRegionOperationRequest() + operation_request.project = request.project + operation_request.region = request.region + operation_request.operation = response.name + + get_operation = functools.partial(operation_service.get, operation_request) + # Cancel is not part of extended operations yet. + cancel_operation = lambda: None + + # Note: this class is an implementation detail to provide a uniform + # set of names for certain fields in the extended operation proto message. + # See google.api_core.extended_operation.ExtendedOperation for details + # on these properties and the expected interface. + class _CustomOperation(extended_operation.ExtendedOperation): + @property + def error_message(self): + return self._extended_operation.http_error_message + + @property + def error_code(self): + return self._extended_operation.http_error_status_code + + response = _CustomOperation.make(get_operation, cancel_operation, response) + # Done; return the response. return response diff --git a/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py b/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py index 6766fa1a3..c7a2ecc74 100644 --- a/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py +++ b/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py @@ -26,6 +26,7 @@ from google.oauth2 import service_account # type: ignore from google.cloud.compute_v1.types import compute +from google.cloud.compute_v1.services import region_operations try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -83,6 +84,8 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + self._extended_operations_services: Dict[str, Any] = {} + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -206,5 +209,21 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + + @property + def _region_operations_client(self) -> region_operations.RegionOperationsClient: + ex_op_service = self._extended_operations_services.get("region_operations") + if not ex_op_service: + ex_op_service = region_operations.RegionOperationsClient( + credentials=self._credentials, + transport=self.kind, + ) + self._extended_operations_services["region_operations"] = ex_op_service + + return ex_op_service + __all__ = ("VpnTunnelsTransport",) diff --git a/google/cloud/compute_v1/services/vpn_tunnels/transports/rest.py b/google/cloud/compute_v1/services/vpn_tunnels/transports/rest.py index a4d761034..9dee758a2 100644 --- a/google/cloud/compute_v1/services/vpn_tunnels/transports/rest.py +++ b/google/cloud/compute_v1/services/vpn_tunnels/transports/rest.py @@ -850,6 +850,10 @@ def list(self) -> Callable[[compute.ListVpnTunnelsRequest], compute.VpnTunnelLis # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/zone_operations/client.py b/google/cloud/compute_v1/services/zone_operations/client.py index 72302655b..779022d03 100644 --- a/google/cloud/compute_v1/services/zone_operations/client.py +++ b/google/cloud/compute_v1/services/zone_operations/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/zone_operations/transports/base.py b/google/cloud/compute_v1/services/zone_operations/transports/base.py index 56a9d7faf..e0440e27c 100644 --- a/google/cloud/compute_v1/services/zone_operations/transports/base.py +++ b/google/cloud/compute_v1/services/zone_operations/transports/base.py @@ -83,6 +83,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -193,5 +194,9 @@ def wait( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("ZoneOperationsTransport",) diff --git a/google/cloud/compute_v1/services/zone_operations/transports/rest.py b/google/cloud/compute_v1/services/zone_operations/transports/rest.py index 727fd836e..a0f7227ef 100644 --- a/google/cloud/compute_v1/services/zone_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/zone_operations/transports/rest.py @@ -727,6 +727,10 @@ def wait(self) -> Callable[[compute.WaitZoneOperationRequest], compute.Operation # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/services/zones/client.py b/google/cloud/compute_v1/services/zones/client.py index 7f446cabb..bbddb4ce0 100644 --- a/google/cloud/compute_v1/services/zones/client.py +++ b/google/cloud/compute_v1/services/zones/client.py @@ -16,7 +16,7 @@ from collections import OrderedDict import os import re -from typing import Dict, Optional, Sequence, Tuple, Type, Union +from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union import pkg_resources from google.api_core import client_options as client_options_lib diff --git a/google/cloud/compute_v1/services/zones/transports/base.py b/google/cloud/compute_v1/services/zones/transports/base.py index 104412238..080debe2f 100644 --- a/google/cloud/compute_v1/services/zones/transports/base.py +++ b/google/cloud/compute_v1/services/zones/transports/base.py @@ -84,6 +84,7 @@ def __init__( always_use_jwt_access (Optional[bool]): Whether self signed JWT should be used for service account credentials. """ + # Save the hostname. Default to port 443 (HTTPS) if none is specified. if ":" not in host: host += ":443" @@ -161,5 +162,9 @@ def list( ]: raise NotImplementedError() + @property + def kind(self) -> str: + raise NotImplementedError() + __all__ = ("ZonesTransport",) diff --git a/google/cloud/compute_v1/services/zones/transports/rest.py b/google/cloud/compute_v1/services/zones/transports/rest.py index 3a8d799cc..6f0efbc7d 100644 --- a/google/cloud/compute_v1/services/zones/transports/rest.py +++ b/google/cloud/compute_v1/services/zones/transports/rest.py @@ -419,6 +419,10 @@ def list(self) -> Callable[[compute.ListZonesRequest], compute.ZoneList]: # In C++ this would require a dynamic_cast return stub # type: ignore + @property + def kind(self) -> str: + return "rest" + def close(self): self._session.close() diff --git a/google/cloud/compute_v1/types/compute.py b/google/cloud/compute_v1/types/compute.py index 05fc80163..2b4731961 100644 --- a/google/cloud/compute_v1/types/compute.py +++ b/google/cloud/compute_v1/types/compute.py @@ -29293,8 +29293,6 @@ class InsertFirewallPolicyRequest(proto.Message): "folders/[FOLDER_ID]" if the parent is a folder or "organizations/[ORGANIZATION_ID]" if the parent is an organization. - - This field is a member of `oneof`_ ``_parent_id``. request_id (str): An optional request ID to identify requests. Specify a unique request ID so that if you must @@ -29323,7 +29321,6 @@ class InsertFirewallPolicyRequest(proto.Message): parent_id = proto.Field( proto.STRING, number=459714768, - optional=True, ) request_id = proto.Field( proto.STRING, @@ -50313,8 +50310,6 @@ class MoveFirewallPolicyRequest(proto.Message): Name of the firewall policy to update. parent_id (str): The new parent of the firewall policy. - - This field is a member of `oneof`_ ``_parent_id``. request_id (str): An optional request ID to identify requests. Specify a unique request ID so that if you must @@ -50342,7 +50337,6 @@ class MoveFirewallPolicyRequest(proto.Message): parent_id = proto.Field( proto.STRING, number=459714768, - optional=True, ) request_id = proto.Field( proto.STRING, @@ -54279,6 +54273,11 @@ class Status(proto.Enum): optional=True, ) + @property + def done(self) -> bool: + """Return True if the backing extended operation is completed, False otherwise.""" + return self.status == type(self.status).DONE + class OperationAggregatedList(proto.Message): r""" diff --git a/noxfile.py b/noxfile.py index f03a84e5c..c64eb809d 100644 --- a/noxfile.py +++ b/noxfile.py @@ -25,7 +25,8 @@ import nox BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] +ISORT_VERSION = "isort==5.10.1" +LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"] DEFAULT_PYTHON_VERSION = "3.8" @@ -83,7 +84,7 @@ def lint(session): session.run( "black", "--check", - *BLACK_PATHS, + *LINT_PATHS, ) session.run("flake8", "google", "tests") @@ -94,7 +95,27 @@ def blacken(session): session.install(BLACK_VERSION) session.run( "black", - *BLACK_PATHS, + *LINT_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def format(session): + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run( + "isort", + "--fss", + *LINT_PATHS, + ) + session.run( + "black", + *LINT_PATHS, ) diff --git a/samples/ingredients/disks/autodelete_change.py b/samples/ingredients/disks/autodelete_change.py index 589fe75bf..4238c3094 100644 --- a/samples/ingredients/disks/autodelete_change.py +++ b/samples/ingredients/disks/autodelete_change.py @@ -46,16 +46,8 @@ def set_disk_autodelete(project_id: str, zone: str, instance_name: str, disk_nam disk.auto_delete = autodelete - operation = instance_client.update_unary(project=project_id, zone=zone, instance=instance_name, instance_resource=instance) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait(project=project_id, zone=zone, operation=operation.name) - - if operation.error: - print("Error during instance update:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during instance update:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = instance_client.update(project=project_id, zone=zone, instance=instance_name, instance_resource=instance) + + wait_for_extended_operation(operation, "disk update") return # diff --git a/samples/ingredients/disks/create_empty_disk.py b/samples/ingredients/disks/create_empty_disk.py index 7422caf45..b06f283f0 100644 --- a/samples/ingredients/disks/create_empty_disk.py +++ b/samples/ingredients/disks/create_empty_disk.py @@ -47,17 +47,9 @@ def create_empty_disk( disk.type_ = disk_type disk_client = compute_v1.DisksClient() - operation = disk_client.insert_unary(project=project_id, zone=zone, disk_resource=disk) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait(project=project_id, zone=zone, operation=operation.name) - - if operation.error: - print("Error during disk creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during disk creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk) + + wait_for_extended_operation(operation, "disk creation") return disk_client.get(project=project_id, zone=zone, disk=disk.name) # diff --git a/samples/ingredients/disks/create_from_image.py b/samples/ingredients/disks/create_from_image.py index c8e1bdce1..ab6ebf28e 100644 --- a/samples/ingredients/disks/create_from_image.py +++ b/samples/ingredients/disks/create_from_image.py @@ -51,17 +51,9 @@ def create_disk_from_image( disk.source_image = source_image disk_client = compute_v1.DisksClient() - operation = disk_client.insert_unary(project=project_id, zone=zone, disk_resource=disk) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait(project=project_id, zone=zone, operation=operation.name) + operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk) - if operation.error: - print("Error during disk creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during disk creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + wait_for_extended_operation(operation, "disk creation") return disk_client.get(project=project_id, zone=zone, disk=disk.name) # diff --git a/samples/ingredients/disks/create_from_snapshot.py b/samples/ingredients/disks/create_from_snapshot.py index 059ab0180..88a797512 100644 --- a/samples/ingredients/disks/create_from_snapshot.py +++ b/samples/ingredients/disks/create_from_snapshot.py @@ -48,18 +48,9 @@ def create_disk_from_snapshot(project_id: str, zone: str, disk_name: str, disk_t disk.source_snapshot = snapshot_link disk.type_ = disk_type disk.name = disk_name - operation = disk_client.insert_unary(project=project_id, zone=zone, disk_resource=disk) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait(project=project_id, zone=zone, operation=operation.name) + operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk) - if operation.error: - print("Error during disk creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - - if operation.warnings: - print("Warnings during disk creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + wait_for_extended_operation(operation, "disk creation") return disk_client.get(project=project_id, zone=zone, disk=disk_name) # diff --git a/samples/ingredients/disks/delete.py b/samples/ingredients/disks/delete.py index d66294ece..6b3788b94 100644 --- a/samples/ingredients/disks/delete.py +++ b/samples/ingredients/disks/delete.py @@ -33,16 +33,7 @@ def delete_disk(project_id: str, zone: str, disk_name: str) -> NoReturn: disk_name: name of the disk you want to delete. """ disk_client = compute_v1.DisksClient() - operation = disk_client.delete_unary(project=project_id, zone=zone, disk=disk_name) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait(project=project_id, zone=zone, operation=operation.name) - - if operation.error: - print("Error during disk delete operation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during disk delete operation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = disk_client.delete(project=project_id, zone=zone, disk=disk_name) + wait_for_extended_operation(operation, "disk deletion") return # diff --git a/samples/ingredients/firewall/create.py b/samples/ingredients/firewall/create.py index e6e9f0008..d6f17b090 100644 --- a/samples/ingredients/firewall/create.py +++ b/samples/ingredients/firewall/create.py @@ -16,6 +16,7 @@ # folder for complete code samples that are ready to be used. # Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. # flake8: noqa + from google.cloud import compute_v1 @@ -61,12 +62,11 @@ def create_firewall_rule( # firewall_rule.priority = 0 firewall_client = compute_v1.FirewallsClient() - op = firewall_client.insert_unary( + operation = firewall_client.insert( project=project_id, firewall_resource=firewall_rule ) - op_client = compute_v1.GlobalOperationsClient() - op_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "firewall rule creation") return firewall_client.get(project=project_id, firewall=firewall_rule_name) # diff --git a/samples/ingredients/firewall/delete.py b/samples/ingredients/firewall/delete.py index fc6a42150..1f4b87031 100644 --- a/samples/ingredients/firewall/delete.py +++ b/samples/ingredients/firewall/delete.py @@ -16,6 +16,7 @@ # folder for complete code samples that are ready to be used. # Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. # flake8: noqa + from google.cloud import compute_v1 @@ -29,11 +30,10 @@ def delete_firewall_rule(project_id: str, firewall_rule_name: str) -> None: firewall_rule_name: name of the firewall rule you want to delete. """ firewall_client = compute_v1.FirewallsClient() - operation = firewall_client.delete_unary( + operation = firewall_client.delete( project=project_id, firewall=firewall_rule_name ) - operation_client = compute_v1.GlobalOperationsClient() - operation_client.wait(project=project_id, operation=operation.name) + wait_for_extended_operation(operation, "firewall rule deletion") return # diff --git a/samples/ingredients/firewall/patch.py b/samples/ingredients/firewall/patch.py index 5017114a3..0c44979cd 100644 --- a/samples/ingredients/firewall/patch.py +++ b/samples/ingredients/firewall/patch.py @@ -16,6 +16,7 @@ # folder for complete code samples that are ready to be used. # Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. # flake8: noqa + from google.cloud import compute_v1 @@ -35,12 +36,11 @@ def patch_firewall_priority(project_id: str, firewall_rule_name: str, priority: # The patch operation doesn't require the full definition of a Firewall object. It will only update # the values that were set in it, in this case it will only change the priority. firewall_client = compute_v1.FirewallsClient() - operation = firewall_client.patch_unary( + operation = firewall_client.patch( project=project_id, firewall=firewall_rule_name, firewall_resource=firewall_rule ) - operation_client = compute_v1.GlobalOperationsClient() - operation_client.wait(project=project_id, operation=operation.name) + wait_for_extended_operation(operation, "firewall rule patching") return # diff --git a/samples/ingredients/instance-templates/create.py b/samples/ingredients/instance-templates/create.py index ca56e99a8..9c79f8c76 100644 --- a/samples/ingredients/instance-templates/create.py +++ b/samples/ingredients/instance-templates/create.py @@ -16,6 +16,7 @@ # folder for complete code samples that are ready to be used. # Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. # flake8: noqa +import sys from google.cloud import compute_v1 @@ -64,11 +65,11 @@ def create_template(project_id: str, template_name: str) -> compute_v1.InstanceT template.properties.network_interfaces = [network_interface] template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.insert_unary( + operation = template_client.insert( project=project_id, instance_template_resource=template ) - operation_client.wait(project=project_id, operation=op.name) + + wait_for_extended_operation(operation, "instance template creation") return template_client.get(project=project_id, instance_template=template_name) # diff --git a/samples/ingredients/instance-templates/create_from_instance.py b/samples/ingredients/instance-templates/create_from_instance.py index 584e2f177..1450cf02f 100644 --- a/samples/ingredients/instance-templates/create_from_instance.py +++ b/samples/ingredients/instance-templates/create_from_instance.py @@ -54,11 +54,11 @@ def create_template_from_instance( template.source_instance_params.disk_configs = [disk] template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.insert_unary( + operation = template_client.insert( project=project_id, instance_template_resource=template ) - operation_client.wait(project=project_id, operation=op.name) + + wait_for_extended_operation(operation, "instance template creation") return template_client.get(project=project_id, instance_template=template_name) # diff --git a/samples/ingredients/instance-templates/create_with_subnet.py b/samples/ingredients/instance-templates/create_with_subnet.py index fb80d2510..fd91bb3c9 100644 --- a/samples/ingredients/instance-templates/create_with_subnet.py +++ b/samples/ingredients/instance-templates/create_with_subnet.py @@ -63,11 +63,10 @@ def create_template_with_subnet( template.properties.network_interfaces = [network_interface] template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.insert_unary( + operation = template_client.insert( project=project_id, instance_template_resource=template ) - operation_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "instance template creation") return template_client.get(project=project_id, instance_template=template_name) # diff --git a/samples/ingredients/instance-templates/delete.py b/samples/ingredients/instance-templates/delete.py index 23bd929ee..f37206660 100644 --- a/samples/ingredients/instance-templates/delete.py +++ b/samples/ingredients/instance-templates/delete.py @@ -30,10 +30,9 @@ def delete_instance_template(project_id: str, template_name: str): template_name: name of the template to delete. """ template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.delete_unary( + operation = template_client.delete( project=project_id, instance_template=template_name ) - operation_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "instance template deletion") return # diff --git a/samples/ingredients/instances/create_instance.py b/samples/ingredients/instances/create_instance.py index 17ab8319b..f49fa6a98 100644 --- a/samples/ingredients/instances/create_instance.py +++ b/samples/ingredients/instances/create_instance.py @@ -18,11 +18,10 @@ # flake8: noqa import re -import sys -from google.cloud import compute_v1 -import time from typing import List +from google.cloud import compute_v1 + # def create_instance( @@ -79,7 +78,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -135,19 +133,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) # diff --git a/samples/ingredients/instances/create_instance_from_template.py b/samples/ingredients/instances/create_instance_from_template.py index 73ff814f4..b007f4f40 100644 --- a/samples/ingredients/instances/create_instance_from_template.py +++ b/samples/ingredients/instances/create_instance_from_template.py @@ -41,7 +41,6 @@ def create_instance_from_template( Returns: Instance object. """ - operation_client = compute_v1.ZoneOperationsClient() instance_client = compute_v1.InstancesClient() instance_insert_request = compute_v1.InsertInstanceRequest() @@ -50,8 +49,8 @@ def create_instance_from_template( instance_insert_request.source_instance_template = instance_template_url instance_insert_request.instance_resource.name = instance_name - op = instance_client.insert_unary(instance_insert_request) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + operation = instance_client.insert(instance_insert_request) + wait_for_extended_operation(operation, "instance creation") return instance_client.get(project=project_id, zone=zone, instance=instance_name) # diff --git a/samples/ingredients/instances/create_instance_from_template_with_overrides.py b/samples/ingredients/instances/create_instance_from_template_with_overrides.py index 001cb5179..5920a0648 100644 --- a/samples/ingredients/instances/create_instance_from_template_with_overrides.py +++ b/samples/ingredients/instances/create_instance_from_template_with_overrides.py @@ -53,7 +53,6 @@ def create_instance_from_template_with_overrides( Returns: Instance object. """ - operation_client = compute_v1.ZoneOperationsClient() instance_client = compute_v1.InstancesClient() instance_template_client = compute_v1.InstanceTemplatesClient() @@ -90,8 +89,8 @@ def create_instance_from_template_with_overrides( instance_insert_request.instance_resource = instance instance_insert_request.source_instance_template = instance_template.self_link - op = instance_client.insert_unary(instance_insert_request) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + operation = instance_client.insert(instance_insert_request) + wait_for_extended_operation(operation, "instance creation") return instance_client.get(project=project_id, zone=zone, instance=instance_name) # \ No newline at end of file diff --git a/samples/ingredients/instances/custom_machine_types/update_memory.py b/samples/ingredients/instances/custom_machine_types/update_memory.py index ee9ed2a75..fd1afac89 100644 --- a/samples/ingredients/instances/custom_machine_types/update_memory.py +++ b/samples/ingredients/instances/custom_machine_types/update_memory.py @@ -38,7 +38,6 @@ def add_extended_memory_to_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() instance = instance_client.get( project=project_id, zone=zone, instance=instance_name ) @@ -51,10 +50,10 @@ def add_extended_memory_to_instance( instance.Status.TERMINATED.name, instance.Status.STOPPED.name, ): - op = instance_client.stop_unary( + operation = instance_client.stop( project=project_id, zone=zone, instance=instance_name ) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + wait_for_extended_operation(operation, "instance stopping") start = time.time() while instance.status not in ( instance.Status.TERMINATED.name, @@ -77,13 +76,13 @@ def add_extended_memory_to_instance( # cmt.memory_mb = new_memory # cmt.extra_memory_used = True # instance.machine_type = str(cmt) - op = instance_client.update_unary( + operation = instance_client.update( project=project_id, zone=zone, instance=instance_name, instance_resource=instance, ) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + wait_for_extended_operation(operation, "instance update") return instance_client.get(project=project_id, zone=zone, instance=instance_name) # diff --git a/samples/ingredients/instances/delete.py b/samples/ingredients/instances/delete.py index ee84a349c..bd16d439a 100644 --- a/samples/ingredients/instances/delete.py +++ b/samples/ingredients/instances/delete.py @@ -33,24 +33,12 @@ def delete_instance(project_id: str, zone: str, machine_name: str) -> None: machine_name: name of the machine you want to delete. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() print(f"Deleting {machine_name} from {zone}...") - operation = instance_client.delete_unary( + operation = instance_client.delete( project=project_id, zone=zone, instance=machine_name ) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during deletion:", operation.error, file=sys.stderr) - return - if operation.warnings: - print("Warning during deletion:", operation.warnings, file=sys.stderr) + wait_for_extended_operation(operation, "instance deletion") print(f"Instance {machine_name} deleted.") return # diff --git a/samples/ingredients/instances/delete_protection/set.py b/samples/ingredients/instances/delete_protection/set.py index fd7bd4ca9..4d3a73a5b 100644 --- a/samples/ingredients/instances/delete_protection/set.py +++ b/samples/ingredients/instances/delete_protection/set.py @@ -33,7 +33,6 @@ def set_delete_protection( protected against deletion or not. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() request = compute_v1.SetDeletionProtectionInstanceRequest() request.project = project_id @@ -41,7 +40,7 @@ def set_delete_protection( request.resource = instance_name request.deletion_protection = delete_protection - operation = instance_client.set_deletion_protection_unary(request) - operation_client.wait(project=project_id, zone=zone, operation=operation.name) + operation = instance_client.set_deletion_protection(request) + wait_for_extended_operation(operation, "changing delete protection setting") return # diff --git a/samples/ingredients/instances/reset.py b/samples/ingredients/instances/reset.py index a0d29a1d9..f784e4b91 100644 --- a/samples/ingredients/instances/reset.py +++ b/samples/ingredients/instances/reset.py @@ -31,16 +31,12 @@ def reset_instance(project_id: str, zone: str, instance_name: str) -> None: instance_name: name of the instance your want to reset. """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() - op = instance_client.reset_unary( + operation = instance_client.reset( project=project_id, zone=zone, instance=instance_name ) - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance reset") + return # diff --git a/samples/ingredients/instances/resume.py b/samples/ingredients/instances/resume.py new file mode 100644 index 000000000..2dcfcd325 --- /dev/null +++ b/samples/ingredients/instances/resume.py @@ -0,0 +1,47 @@ +# Copyright 2022 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. + +# This is an ingredient file. It is not meant to be run directly. Check the samples/snippets +# folder for complete code samples that are ready to be used. +# Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. +# flake8: noqa +import time + +from google.cloud import compute_v1 + + +# +def resume_instance(project_id: str, zone: str, instance_name: str) -> None: + """ + Resume a suspended Google Compute Engine instance (with unencrypted disks). + Args: + project_id: project ID or project number of the Cloud project your instance belongs to. + zone: name of the zone your instance belongs to. + instance_name: name of the instance your want to resume. + """ + instance_client = compute_v1.InstancesClient() + + instance = instance_client.get(project=project_id, zone=zone, instance=instance_name) + if instance.status != compute_v1.Instance.Status.SUSPENDED.name: + raise RuntimeError(f"Only suspended instances can be resumed. " + f"Instance {instance_name} is in {instance.status} state.") + + operation = instance_client.resume( + project=project_id, zone=zone, instance=instance_name + ) + + wait_for_extended_operation(operation, "instance resumption") + return +# + diff --git a/samples/ingredients/instances/start.py b/samples/ingredients/instances/start.py index a57359b10..eeba32eb7 100644 --- a/samples/ingredients/instances/start.py +++ b/samples/ingredients/instances/start.py @@ -31,16 +31,11 @@ def start_instance(project_id: str, zone: str, instance_name: str) -> None: instance_name: name of the instance your want to start. """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() - op = instance_client.start_unary( + operation = instance_client.start( project=project_id, zone=zone, instance=instance_name ) - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance start") return # diff --git a/samples/ingredients/instances/start_encrypted.py b/samples/ingredients/instances/start_encrypted.py index e90c56f2a..201d2233d 100644 --- a/samples/ingredients/instances/start_encrypted.py +++ b/samples/ingredients/instances/start_encrypted.py @@ -36,7 +36,6 @@ def start_instance_with_encryption_key( https://cloud.google.com/compute/docs/disks/customer-supplied-encryption#specifications """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() instance_data = instance_client.get( project=project_id, zone=zone, instance=instance_name @@ -52,17 +51,13 @@ def start_instance_with_encryption_key( enc_data = compute_v1.InstancesStartWithEncryptionKeyRequest() enc_data.disks = [disk_data] - op = instance_client.start_with_encryption_key_unary( + operation = instance_client.start_with_encryption_key( project=project_id, zone=zone, instance=instance_name, instances_start_with_encryption_key_request_resource=enc_data, ) - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance start (with encrypted disk)") return # diff --git a/samples/ingredients/instances/stop.py b/samples/ingredients/instances/stop.py index 903053348..ea1b532f8 100644 --- a/samples/ingredients/instances/stop.py +++ b/samples/ingredients/instances/stop.py @@ -31,16 +31,10 @@ def stop_instance(project_id: str, zone: str, instance_name: str) -> None: instance_name: name of the instance your want to stop. """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() - op = instance_client.stop_unary( + operation = instance_client.stop( project=project_id, zone=zone, instance=instance_name ) - - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance stopping") return # diff --git a/samples/ingredients/instances/suspend.py b/samples/ingredients/instances/suspend.py new file mode 100644 index 000000000..d38cac81e --- /dev/null +++ b/samples/ingredients/instances/suspend.py @@ -0,0 +1,42 @@ +# Copyright 2022 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. + +# This is an ingredient file. It is not meant to be run directly. Check the samples/snippets +# folder for complete code samples that are ready to be used. +# Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. +# flake8: noqa +import time + +from google.cloud import compute_v1 + + +# +def suspend_instance(project_id: str, zone: str, instance_name: str) -> None: + """ + Suspend a running Google Compute Engine instance. + Args: + project_id: project ID or project number of the Cloud project your instance belongs to. + zone: name of the zone your instance belongs to. + instance_name: name of the instance your want to suspend. + """ + instance_client = compute_v1.InstancesClient() + + operation = instance_client.suspend( + project=project_id, zone=zone, instance=instance_name + ) + + wait_for_extended_operation(operation, "instance suspend") + return +# + diff --git a/samples/ingredients/operations/handle_extended_operation.py b/samples/ingredients/operations/handle_extended_operation.py new file mode 100644 index 000000000..7c75c17f7 --- /dev/null +++ b/samples/ingredients/operations/handle_extended_operation.py @@ -0,0 +1,68 @@ +# Copyright 2022 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. + +# This is an ingredient file. It is not meant to be run directly. Check the samples/snippets +# folder for complete code samples that are ready to be used. +# Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. +# flake8: noqa +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation + + +# +def wait_for_extended_operation( + operation: ExtendedOperation, + verbose_name: str = "operation", + timeout: int = 300) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print(f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", file=sys.stderr) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result +# diff --git a/samples/ingredients/operations/list_zone_operations.py b/samples/ingredients/operations/list_zone_operations.py index 7089f023f..472e893d5 100644 --- a/samples/ingredients/operations/list_zone_operations.py +++ b/samples/ingredients/operations/list_zone_operations.py @@ -43,4 +43,4 @@ def list_zone_operations( request.filter = filter return operation_client.list(request) -# \ No newline at end of file +# diff --git a/samples/ingredients/snapshots/create.py b/samples/ingredients/snapshots/create.py index 3e3b2a97c..1c876a206 100644 --- a/samples/ingredients/snapshots/create.py +++ b/samples/ingredients/snapshots/create.py @@ -16,7 +16,6 @@ # folder for complete code samples that are ready to be used. # Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. # flake8: noqa -import sys from google.cloud import compute_v1 @@ -43,17 +42,9 @@ def create_snapshot(project_id: str, zone: str, disk_name: str, snapshot_name: s snapshot.name = snapshot_name snapshot_client = compute_v1.SnapshotsClient() - operation = snapshot_client.insert_unary(project=project_id, snapshot_resource=snapshot) - op_client = compute_v1.GlobalOperationsClient() - operation = op_client.wait(project=project_id, operation=operation.name) - - if operation.error: - print("Error during snapshot creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during snapshot creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = snapshot_client.insert(project=project_id, snapshot_resource=snapshot) + + wait_for_extended_operation(operation, "snapshot creation") return snapshot_client.get(project=project_id, snapshot=snapshot_name) diff --git a/samples/ingredients/snapshots/delete.py b/samples/ingredients/snapshots/delete.py index dd3f1f29c..e7f5af9bc 100644 --- a/samples/ingredients/snapshots/delete.py +++ b/samples/ingredients/snapshots/delete.py @@ -16,7 +16,6 @@ # folder for complete code samples that are ready to be used. # Disabling flake8 for the ingredients file, as it would fail F821 - undefined name check. # flake8: noqa -import sys from typing import NoReturn from google.cloud import compute_v1 @@ -33,17 +32,9 @@ def delete_snapshot(project_id: str, snapshot_name: str) -> NoReturn: """ snapshot_client = compute_v1.SnapshotsClient() - operation = snapshot_client.delete_unary(project=project_id, snapshot=snapshot_name) - op_client = compute_v1.GlobalOperationsClient() - operation = op_client.wait(project=project_id, operation=operation.name) - - if operation.error: - print("Error during snapshot deletion:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during snapshot deletion:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = snapshot_client.delete(project=project_id, snapshot=snapshot_name) + + wait_for_extended_operation(operation, "snapshot deletion") return # diff --git a/samples/ingredients/usage_report/disable.py b/samples/ingredients/usage_report/disable.py index e8d1464cb..4fc7ad6c1 100644 --- a/samples/ingredients/usage_report/disable.py +++ b/samples/ingredients/usage_report/disable.py @@ -31,13 +31,10 @@ def disable_usage_export(project_id: str) -> None: # Setting `usage_export_location_resource` to an # empty object will disable the usage report generation. - operation = projects_client.set_usage_export_bucket_unary( + operation = projects_client.set_usage_export_bucket( project=project_id, usage_export_location_resource={} ) - op_client = compute_v1.GlobalOperationsClient() - - while operation.status != compute_v1.Operation.Status.DONE: - operation = op_client.wait(operation=operation.name, project=project_id) + wait_for_extended_operation(operation, "disabling GCE usage bucket") # diff --git a/samples/ingredients/usage_report/set_bucket.py b/samples/ingredients/usage_report/set_bucket.py index 7a948c8b7..f308257df 100644 --- a/samples/ingredients/usage_report/set_bucket.py +++ b/samples/ingredients/usage_report/set_bucket.py @@ -49,13 +49,10 @@ def set_usage_export_bucket( ) projects_client = compute_v1.ProjectsClient() - operation = projects_client.set_usage_export_bucket_unary( + operation = projects_client.set_usage_export_bucket( project=project_id, usage_export_location_resource=usage_export_location ) - op_client = compute_v1.GlobalOperationsClient() - - while operation.status != compute_v1.Operation.Status.DONE: - operation = op_client.wait(operation=operation.name, project=project_id) + wait_for_extended_operation(operation, "setting GCE usage bucket") # diff --git a/samples/noxfile.py b/samples/noxfile.py index 25f87a215..a40410b56 100644 --- a/samples/noxfile.py +++ b/samples/noxfile.py @@ -30,6 +30,7 @@ # WARNING - WARNING - WARNING - WARNING - WARNING BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" # Copy `noxfile_config.py` to your directory and modify it instead. @@ -168,12 +169,33 @@ def lint(session: nox.sessions.Session) -> None: @nox.session def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" session.install(BLACK_VERSION) python_files = [path for path in os.listdir(".") if path.endswith(".py")] session.run("black", *python_files) +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + # # Sample Tests # diff --git a/samples/recipes/disks/autodelete_change.py b/samples/recipes/disks/autodelete_change.py index 33120f897..62465ac91 100644 --- a/samples/recipes/disks/autodelete_change.py +++ b/samples/recipes/disks/autodelete_change.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/disks/create_empty_disk.py b/samples/recipes/disks/create_empty_disk.py index 923f79d07..c044d56f3 100644 --- a/samples/recipes/disks/create_empty_disk.py +++ b/samples/recipes/disks/create_empty_disk.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/disks/create_from_image.py b/samples/recipes/disks/create_from_image.py index 407b4aa0d..a1aa318af 100644 --- a/samples/recipes/disks/create_from_image.py +++ b/samples/recipes/disks/create_from_image.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/disks/create_from_snapshot.py b/samples/recipes/disks/create_from_snapshot.py index c33060ca2..efc3e29cc 100644 --- a/samples/recipes/disks/create_from_snapshot.py +++ b/samples/recipes/disks/create_from_snapshot.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/disks/delete.py b/samples/recipes/disks/delete.py index e319a075c..c8bf1d904 100644 --- a/samples/recipes/disks/delete.py +++ b/samples/recipes/disks/delete.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/firewall/create.py b/samples/recipes/firewall/create.py index 8d76598fa..b4770f78a 100644 --- a/samples/recipes/firewall/create.py +++ b/samples/recipes/firewall/create.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/firewall/delete.py b/samples/recipes/firewall/delete.py index 6c3752fa6..ed25d5d1f 100644 --- a/samples/recipes/firewall/delete.py +++ b/samples/recipes/firewall/delete.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/firewall/patch.py b/samples/recipes/firewall/patch.py index 543157e1a..48b717308 100644 --- a/samples/recipes/firewall/patch.py +++ b/samples/recipes/firewall/patch.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instance_templates/create.py b/samples/recipes/instance_templates/create.py index 6c313c2d2..f3fe9d797 100644 --- a/samples/recipes/instance_templates/create.py +++ b/samples/recipes/instance_templates/create.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instance_templates/create_from_instance.py b/samples/recipes/instance_templates/create_from_instance.py index 751416fe3..2059793f3 100644 --- a/samples/recipes/instance_templates/create_from_instance.py +++ b/samples/recipes/instance_templates/create_from_instance.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instance_templates/create_with_subnet.py b/samples/recipes/instance_templates/create_with_subnet.py index 85639db00..0aeba05dd 100644 --- a/samples/recipes/instance_templates/create_with_subnet.py +++ b/samples/recipes/instance_templates/create_with_subnet.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instance_templates/delete.py b/samples/recipes/instance_templates/delete.py index bf774c57d..8a9743b61 100644 --- a/samples/recipes/instance_templates/delete.py +++ b/samples/recipes/instance_templates/delete.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instances/create.py b/samples/recipes/instances/create.py index b51a2e737..3f35a1e4c 100644 --- a/samples/recipes/instances/create.py +++ b/samples/recipes/instances/create.py @@ -20,6 +20,8 @@ # +# + # # diff --git a/samples/recipes/instances/create_start_instance/create_from_custom_image.py b/samples/recipes/instances/create_start_instance/create_from_custom_image.py index e50d60367..a093f8cb3 100644 --- a/samples/recipes/instances/create_start_instance/create_from_custom_image.py +++ b/samples/recipes/instances/create_start_instance/create_from_custom_image.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/create_start_instance/create_from_public_image.py b/samples/recipes/instances/create_start_instance/create_from_public_image.py index 6f6f0ee04..ac6f2d9bd 100644 --- a/samples/recipes/instances/create_start_instance/create_from_public_image.py +++ b/samples/recipes/instances/create_start_instance/create_from_public_image.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/create_start_instance/create_from_snapshot.py b/samples/recipes/instances/create_start_instance/create_from_snapshot.py index 2047eeb57..34d3e9a9b 100644 --- a/samples/recipes/instances/create_start_instance/create_from_snapshot.py +++ b/samples/recipes/instances/create_start_instance/create_from_snapshot.py @@ -18,6 +18,8 @@ # +# + # diff --git a/samples/recipes/instances/create_start_instance/create_with_additional_disk.py b/samples/recipes/instances/create_start_instance/create_with_additional_disk.py index ab9baa6e4..097cc1cf2 100644 --- a/samples/recipes/instances/create_start_instance/create_with_additional_disk.py +++ b/samples/recipes/instances/create_start_instance/create_with_additional_disk.py @@ -25,6 +25,8 @@ # +# + # diff --git a/samples/recipes/instances/create_start_instance/create_with_existing_disks.py b/samples/recipes/instances/create_start_instance/create_with_existing_disks.py index 3f6bf6ac2..dfa59eb36 100644 --- a/samples/recipes/instances/create_start_instance/create_with_existing_disks.py +++ b/samples/recipes/instances/create_start_instance/create_with_existing_disks.py @@ -19,6 +19,8 @@ # +# + # diff --git a/samples/recipes/instances/create_start_instance/create_with_snapshotted_data_disk.py b/samples/recipes/instances/create_start_instance/create_with_snapshotted_data_disk.py index 858e61884..19aec72dc 100644 --- a/samples/recipes/instances/create_start_instance/create_with_snapshotted_data_disk.py +++ b/samples/recipes/instances/create_start_instance/create_with_snapshotted_data_disk.py @@ -25,6 +25,8 @@ # +# + # diff --git a/samples/recipes/instances/create_with_subnet.py b/samples/recipes/instances/create_with_subnet.py index 906edca50..989e64483 100644 --- a/samples/recipes/instances/create_with_subnet.py +++ b/samples/recipes/instances/create_with_subnet.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/custom_hostname/create.py b/samples/recipes/instances/custom_hostname/create.py index 55f3b47e6..588c60382 100644 --- a/samples/recipes/instances/custom_hostname/create.py +++ b/samples/recipes/instances/custom_hostname/create.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/custom_machine_types/create_shared_with_helper.py b/samples/recipes/instances/custom_machine_types/create_shared_with_helper.py index 6adc80098..a4d355d4d 100644 --- a/samples/recipes/instances/custom_machine_types/create_shared_with_helper.py +++ b/samples/recipes/instances/custom_machine_types/create_shared_with_helper.py @@ -24,6 +24,8 @@ # +# + # diff --git a/samples/recipes/instances/custom_machine_types/create_with_helper.py b/samples/recipes/instances/custom_machine_types/create_with_helper.py index 0ea883cf5..8619e6822 100644 --- a/samples/recipes/instances/custom_machine_types/create_with_helper.py +++ b/samples/recipes/instances/custom_machine_types/create_with_helper.py @@ -25,6 +25,8 @@ # +# + # diff --git a/samples/recipes/instances/custom_machine_types/create_without_helper.py b/samples/recipes/instances/custom_machine_types/create_without_helper.py index e88388a82..6b99722f2 100644 --- a/samples/recipes/instances/custom_machine_types/create_without_helper.py +++ b/samples/recipes/instances/custom_machine_types/create_without_helper.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/custom_machine_types/extra_mem_no_helper.py b/samples/recipes/instances/custom_machine_types/extra_mem_no_helper.py index 68fdc2759..3b998965d 100644 --- a/samples/recipes/instances/custom_machine_types/extra_mem_no_helper.py +++ b/samples/recipes/instances/custom_machine_types/extra_mem_no_helper.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/custom_machine_types/update_memory.py b/samples/recipes/instances/custom_machine_types/update_memory.py index 5817cd987..4d6b2ced8 100644 --- a/samples/recipes/instances/custom_machine_types/update_memory.py +++ b/samples/recipes/instances/custom_machine_types/update_memory.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instances/delete.py b/samples/recipes/instances/delete.py index 68fc7f554..99cff9e25 100644 --- a/samples/recipes/instances/delete.py +++ b/samples/recipes/instances/delete.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/instances/delete_protection/create.py b/samples/recipes/instances/delete_protection/create.py index f1bb3a9b3..c45d757ea 100644 --- a/samples/recipes/instances/delete_protection/create.py +++ b/samples/recipes/instances/delete_protection/create.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/delete_protection/set.py b/samples/recipes/instances/delete_protection/set.py index 785e8f781..ebd5b5970 100644 --- a/samples/recipes/instances/delete_protection/set.py +++ b/samples/recipes/instances/delete_protection/set.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instances/from_instance_template/create_from_template.py b/samples/recipes/instances/from_instance_template/create_from_template.py index c296366cc..9a07cd10c 100644 --- a/samples/recipes/instances/from_instance_template/create_from_template.py +++ b/samples/recipes/instances/from_instance_template/create_from_template.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instances/from_instance_template/create_from_template_with_overrides.py b/samples/recipes/instances/from_instance_template/create_from_template_with_overrides.py index 27d1b2ae0..c4d5ca109 100644 --- a/samples/recipes/instances/from_instance_template/create_from_template_with_overrides.py +++ b/samples/recipes/instances/from_instance_template/create_from_template_with_overrides.py @@ -16,5 +16,7 @@ # # +# + # # diff --git a/samples/recipes/instances/preemptible/create_preemptible.py b/samples/recipes/instances/preemptible/create_preemptible.py index a61615412..18791d35d 100644 --- a/samples/recipes/instances/preemptible/create_preemptible.py +++ b/samples/recipes/instances/preemptible/create_preemptible.py @@ -21,6 +21,8 @@ # +# + # diff --git a/samples/recipes/instances/reset.py b/samples/recipes/instances/reset.py index 0842ed544..ce09f66e7 100644 --- a/samples/recipes/instances/reset.py +++ b/samples/recipes/instances/reset.py @@ -16,6 +16,7 @@ # # +# # # diff --git a/samples/recipes/instances/resume.py b/samples/recipes/instances/resume.py new file mode 100644 index 000000000..4cc8d7ef5 --- /dev/null +++ b/samples/recipes/instances/resume.py @@ -0,0 +1,23 @@ +# Copyright 2022 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. +# flake8: noqa + +# +# + +# + + +# +# diff --git a/samples/recipes/instances/start.py b/samples/recipes/instances/start.py index 9ea6be08a..913680aa9 100644 --- a/samples/recipes/instances/start.py +++ b/samples/recipes/instances/start.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/instances/start_encrypted.py b/samples/recipes/instances/start_encrypted.py index 6833c644e..d6a0194bd 100644 --- a/samples/recipes/instances/start_encrypted.py +++ b/samples/recipes/instances/start_encrypted.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/instances/stop.py b/samples/recipes/instances/stop.py index 7dda8bcfa..49abe79a0 100644 --- a/samples/recipes/instances/stop.py +++ b/samples/recipes/instances/stop.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/instances/suspend.py b/samples/recipes/instances/suspend.py new file mode 100644 index 000000000..59c5b75f0 --- /dev/null +++ b/samples/recipes/instances/suspend.py @@ -0,0 +1,23 @@ +# Copyright 2022 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. +# flake8: noqa + +# +# + +# + + +# +# diff --git a/samples/recipes/snapshots/create.py b/samples/recipes/snapshots/create.py index b77eb7a98..5b54951b1 100644 --- a/samples/recipes/snapshots/create.py +++ b/samples/recipes/snapshots/create.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/snapshots/delete.py b/samples/recipes/snapshots/delete.py index ff8e89c8e..a9686d6d3 100644 --- a/samples/recipes/snapshots/delete.py +++ b/samples/recipes/snapshots/delete.py @@ -16,6 +16,8 @@ # # +# + # # diff --git a/samples/recipes/usage_report/usage_reports.py b/samples/recipes/usage_report/usage_reports.py index 4a293b800..d153b48d9 100644 --- a/samples/recipes/usage_report/usage_reports.py +++ b/samples/recipes/usage_report/usage_reports.py @@ -28,6 +28,9 @@ # + +# + # # @@ -40,6 +43,9 @@ # + +# + # # diff --git a/samples/requirements-test.txt b/samples/requirements-test.txt index 0d1f5b210..d40fd21e5 100644 --- a/samples/requirements-test.txt +++ b/samples/requirements-test.txt @@ -1,4 +1,4 @@ pytest==7.1.1 pytest-parallel==0.1.1 flaky==3.7.0 -google-cloud-storage==2.2.1 +google-cloud-storage==2.3.0 diff --git a/samples/requirements.txt b/samples/requirements.txt index a6a43c7f8..f8dcc530c 100644 --- a/samples/requirements.txt +++ b/samples/requirements.txt @@ -1,3 +1,3 @@ isort==5.10.1 black==22.3.0 -google-cloud-compute==1.1.0 +google-cloud-compute==1.2.0 diff --git a/samples/snippets/disks/autodelete_change.py b/samples/snippets/disks/autodelete_change.py index 943564cd1..197e275d6 100644 --- a/samples/snippets/disks/autodelete_change.py +++ b/samples/snippets/disks/autodelete_change.py @@ -21,11 +21,58 @@ # [START compute_disk_autodelete_change] import sys -from typing import NoReturn +from typing import Any, NoReturn +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def set_disk_autodelete( project_id: str, zone: str, instance_name: str, disk_name: str, autodelete: bool ) -> NoReturn: @@ -54,24 +101,14 @@ def set_disk_autodelete( disk.auto_delete = autodelete - operation = instance_client.update_unary( + operation = instance_client.update( project=project_id, zone=zone, instance=instance_name, instance_resource=instance, ) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait( - project=project_id, zone=zone, operation=operation.name - ) - if operation.error: - print("Error during instance update:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during instance update:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + wait_for_extended_operation(operation, "disk update") return diff --git a/samples/snippets/disks/create_empty_disk.py b/samples/snippets/disks/create_empty_disk.py index d1352f861..ff86b77d0 100644 --- a/samples/snippets/disks/create_empty_disk.py +++ b/samples/snippets/disks/create_empty_disk.py @@ -21,10 +21,58 @@ # [START compute_disk_create_empty_disk] import sys +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_empty_disk( project_id: str, zone: str, disk_name: str, disk_type: str, disk_size_gb: int ) -> compute_v1.Disk: @@ -50,21 +98,9 @@ def create_empty_disk( disk.type_ = disk_type disk_client = compute_v1.DisksClient() - operation = disk_client.insert_unary( - project=project_id, zone=zone, disk_resource=disk - ) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait( - project=project_id, zone=zone, operation=operation.name - ) - - if operation.error: - print("Error during disk creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during disk creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk) + + wait_for_extended_operation(operation, "disk creation") return disk_client.get(project=project_id, zone=zone, disk=disk.name) diff --git a/samples/snippets/disks/create_from_image.py b/samples/snippets/disks/create_from_image.py index 74e998ada..51ccb8e8c 100644 --- a/samples/snippets/disks/create_from_image.py +++ b/samples/snippets/disks/create_from_image.py @@ -21,10 +21,58 @@ # [START compute_disk_create_from_image] import sys +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_disk_from_image( project_id: str, zone: str, @@ -59,21 +107,9 @@ def create_disk_from_image( disk.source_image = source_image disk_client = compute_v1.DisksClient() - operation = disk_client.insert_unary( - project=project_id, zone=zone, disk_resource=disk - ) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait( - project=project_id, zone=zone, operation=operation.name - ) - - if operation.error: - print("Error during disk creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during disk creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk) + + wait_for_extended_operation(operation, "disk creation") return disk_client.get(project=project_id, zone=zone, disk=disk.name) diff --git a/samples/snippets/disks/create_from_snapshot.py b/samples/snippets/disks/create_from_snapshot.py index 2421adb0f..8aef45ade 100644 --- a/samples/snippets/disks/create_from_snapshot.py +++ b/samples/snippets/disks/create_from_snapshot.py @@ -21,10 +21,58 @@ # [START compute_disk_create_from_snapshot] import sys +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_disk_from_snapshot( project_id: str, zone: str, @@ -57,22 +105,9 @@ def create_disk_from_snapshot( disk.source_snapshot = snapshot_link disk.type_ = disk_type disk.name = disk_name - operation = disk_client.insert_unary( - project=project_id, zone=zone, disk_resource=disk - ) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait( - project=project_id, zone=zone, operation=operation.name - ) - - if operation.error: - print("Error during disk creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) + operation = disk_client.insert(project=project_id, zone=zone, disk_resource=disk) - if operation.warnings: - print("Warnings during disk creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + wait_for_extended_operation(operation, "disk creation") return disk_client.get(project=project_id, zone=zone, disk=disk_name) diff --git a/samples/snippets/disks/delete.py b/samples/snippets/disks/delete.py index 0b5ea3cb3..f5c21d6fe 100644 --- a/samples/snippets/disks/delete.py +++ b/samples/snippets/disks/delete.py @@ -21,11 +21,58 @@ # [START compute_disk_delete] import sys -from typing import NoReturn +from typing import Any, NoReturn +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def delete_disk(project_id: str, zone: str, disk_name: str) -> NoReturn: """ Deletes a disk from a project. @@ -36,19 +83,8 @@ def delete_disk(project_id: str, zone: str, disk_name: str) -> NoReturn: disk_name: name of the disk you want to delete. """ disk_client = compute_v1.DisksClient() - operation = disk_client.delete_unary(project=project_id, zone=zone, disk=disk_name) - operation_client = compute_v1.ZoneOperationsClient() - operation = operation_client.wait( - project=project_id, zone=zone, operation=operation.name - ) - - if operation.error: - print("Error during disk delete operation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during disk delete operation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = disk_client.delete(project=project_id, zone=zone, disk=disk_name) + wait_for_extended_operation(operation, "disk deletion") return diff --git a/samples/snippets/firewall/create.py b/samples/snippets/firewall/create.py index 1eb230dea..8d80a08d8 100644 --- a/samples/snippets/firewall/create.py +++ b/samples/snippets/firewall/create.py @@ -20,9 +20,59 @@ # [START compute_firewall_create] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_firewall_rule( project_id: str, firewall_rule_name: str, network: str = "global/networks/default" ) -> compute_v1.Firewall: @@ -64,12 +114,11 @@ def create_firewall_rule( # firewall_rule.priority = 0 firewall_client = compute_v1.FirewallsClient() - op = firewall_client.insert_unary( + operation = firewall_client.insert( project=project_id, firewall_resource=firewall_rule ) - op_client = compute_v1.GlobalOperationsClient() - op_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "firewall rule creation") return firewall_client.get(project=project_id, firewall=firewall_rule_name) diff --git a/samples/snippets/firewall/delete.py b/samples/snippets/firewall/delete.py index d606912a5..fe2c7c08e 100644 --- a/samples/snippets/firewall/delete.py +++ b/samples/snippets/firewall/delete.py @@ -20,9 +20,59 @@ # [START compute_firewall_delete] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def delete_firewall_rule(project_id: str, firewall_rule_name: str) -> None: """ Deletes a firewall rule from the project. @@ -32,12 +82,9 @@ def delete_firewall_rule(project_id: str, firewall_rule_name: str) -> None: firewall_rule_name: name of the firewall rule you want to delete. """ firewall_client = compute_v1.FirewallsClient() - operation = firewall_client.delete_unary( - project=project_id, firewall=firewall_rule_name - ) + operation = firewall_client.delete(project=project_id, firewall=firewall_rule_name) - operation_client = compute_v1.GlobalOperationsClient() - operation_client.wait(project=project_id, operation=operation.name) + wait_for_extended_operation(operation, "firewall rule deletion") return diff --git a/samples/snippets/firewall/main.py b/samples/snippets/firewall/main.py index b53e677e0..b506328df 100644 --- a/samples/snippets/firewall/main.py +++ b/samples/snippets/firewall/main.py @@ -65,12 +65,11 @@ def create_firewall_rule( # firewall_rule.priority = 0 firewall_client = compute_v1.FirewallsClient() - op = firewall_client.insert_unary( + operation = firewall_client.insert( project=project_id, firewall_resource=firewall_rule ) - op_client = compute_v1.GlobalOperationsClient() - op_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "firewall rule creation") return firewall_client.get(project=project_id, firewall=firewall_rule_name) @@ -84,12 +83,9 @@ def delete_firewall_rule(project_id: str, firewall_rule_name: str) -> None: firewall_rule_name: name of the firewall rule you want to delete. """ firewall_client = compute_v1.FirewallsClient() - operation = firewall_client.delete_unary( - project=project_id, firewall=firewall_rule_name - ) + operation = firewall_client.delete(project=project_id, firewall=firewall_rule_name) - operation_client = compute_v1.GlobalOperationsClient() - operation_client.wait(project=project_id, operation=operation.name) + wait_for_extended_operation(operation, "firewall rule deletion") return @@ -145,12 +141,11 @@ def patch_firewall_priority( # The patch operation doesn't require the full definition of a Firewall object. It will only update # the values that were set in it, in this case it will only change the priority. firewall_client = compute_v1.FirewallsClient() - operation = firewall_client.patch_unary( + operation = firewall_client.patch( project=project_id, firewall=firewall_rule_name, firewall_resource=firewall_rule ) - operation_client = compute_v1.GlobalOperationsClient() - operation_client.wait(project=project_id, operation=operation.name) + wait_for_extended_operation(operation, "firewall rule patching") return diff --git a/samples/snippets/firewall/patch.py b/samples/snippets/firewall/patch.py index 9dbb823da..e81624dc9 100644 --- a/samples/snippets/firewall/patch.py +++ b/samples/snippets/firewall/patch.py @@ -20,9 +20,59 @@ # [START compute_firewall_patch] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def patch_firewall_priority( project_id: str, firewall_rule_name: str, priority: int ) -> None: @@ -40,12 +90,11 @@ def patch_firewall_priority( # The patch operation doesn't require the full definition of a Firewall object. It will only update # the values that were set in it, in this case it will only change the priority. firewall_client = compute_v1.FirewallsClient() - operation = firewall_client.patch_unary( + operation = firewall_client.patch( project=project_id, firewall=firewall_rule_name, firewall_resource=firewall_rule ) - operation_client = compute_v1.GlobalOperationsClient() - operation_client.wait(project=project_id, operation=operation.name) + wait_for_extended_operation(operation, "firewall rule patching") return diff --git a/samples/snippets/instance_templates/create.py b/samples/snippets/instance_templates/create.py index f328bbfc1..4b63601c8 100644 --- a/samples/snippets/instance_templates/create.py +++ b/samples/snippets/instance_templates/create.py @@ -20,9 +20,59 @@ # [START compute_template_create] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_template(project_id: str, template_name: str) -> compute_v1.InstanceTemplate: """ Create a new instance template with the provided name and a specific @@ -66,11 +116,11 @@ def create_template(project_id: str, template_name: str) -> compute_v1.InstanceT template.properties.network_interfaces = [network_interface] template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.insert_unary( + operation = template_client.insert( project=project_id, instance_template_resource=template ) - operation_client.wait(project=project_id, operation=op.name) + + wait_for_extended_operation(operation, "instance template creation") return template_client.get(project=project_id, instance_template=template_name) diff --git a/samples/snippets/instance_templates/create_from_instance.py b/samples/snippets/instance_templates/create_from_instance.py index 20afc7154..7ceff5074 100644 --- a/samples/snippets/instance_templates/create_from_instance.py +++ b/samples/snippets/instance_templates/create_from_instance.py @@ -20,9 +20,59 @@ # [START compute_template_create_from_instance] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_template_from_instance( project_id: str, instance: str, template_name: str ) -> compute_v1.InstanceTemplate: @@ -56,11 +106,11 @@ def create_template_from_instance( template.source_instance_params.disk_configs = [disk] template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.insert_unary( + operation = template_client.insert( project=project_id, instance_template_resource=template ) - operation_client.wait(project=project_id, operation=op.name) + + wait_for_extended_operation(operation, "instance template creation") return template_client.get(project=project_id, instance_template=template_name) diff --git a/samples/snippets/instance_templates/create_with_subnet.py b/samples/snippets/instance_templates/create_with_subnet.py index ea6ddc191..922a0ec27 100644 --- a/samples/snippets/instance_templates/create_with_subnet.py +++ b/samples/snippets/instance_templates/create_with_subnet.py @@ -20,9 +20,59 @@ # [START compute_template_create_with_subnet] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_template_with_subnet( project_id: str, network: str, subnetwork: str, template_name: str ) -> compute_v1.InstanceTemplate: @@ -65,11 +115,10 @@ def create_template_with_subnet( template.properties.network_interfaces = [network_interface] template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.insert_unary( + operation = template_client.insert( project=project_id, instance_template_resource=template ) - operation_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "instance template creation") return template_client.get(project=project_id, instance_template=template_name) diff --git a/samples/snippets/instance_templates/delete.py b/samples/snippets/instance_templates/delete.py index b0700c9ab..d024f70c9 100644 --- a/samples/snippets/instance_templates/delete.py +++ b/samples/snippets/instance_templates/delete.py @@ -20,9 +20,59 @@ # [START compute_template_delete] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def delete_instance_template(project_id: str, template_name: str): """ Delete an instance template. @@ -32,11 +82,10 @@ def delete_instance_template(project_id: str, template_name: str): template_name: name of the template to delete. """ template_client = compute_v1.InstanceTemplatesClient() - operation_client = compute_v1.GlobalOperationsClient() - op = template_client.delete_unary( + operation = template_client.delete( project=project_id, instance_template=template_name ) - operation_client.wait(project=project_id, operation=op.name) + wait_for_extended_operation(operation, "instance template deletion") return diff --git a/samples/snippets/instances/create.py b/samples/snippets/instances/create.py index efa0de173..512ed6176 100644 --- a/samples/snippets/instances/create.py +++ b/samples/snippets/instances/create.py @@ -22,9 +22,9 @@ # [START compute_instances_create] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_start_instance/create_from_custom_image.py b/samples/snippets/instances/create_start_instance/create_from_custom_image.py index 59d32f08c..16dfa1b86 100644 --- a/samples/snippets/instances/create_start_instance/create_from_custom_image.py +++ b/samples/snippets/instances/create_start_instance/create_from_custom_image.py @@ -22,9 +22,9 @@ # [START compute_instances_create_from_custom_image] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_start_instance/create_from_public_image.py b/samples/snippets/instances/create_start_instance/create_from_public_image.py index bfe848afa..881aa2c85 100644 --- a/samples/snippets/instances/create_start_instance/create_from_public_image.py +++ b/samples/snippets/instances/create_start_instance/create_from_public_image.py @@ -22,9 +22,9 @@ # [START compute_instances_create_from_image] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_start_instance/create_from_snapshot.py b/samples/snippets/instances/create_start_instance/create_from_snapshot.py index 2c6996ed8..f7397b0ad 100644 --- a/samples/snippets/instances/create_start_instance/create_from_snapshot.py +++ b/samples/snippets/instances/create_start_instance/create_from_snapshot.py @@ -22,9 +22,9 @@ # [START compute_instances_create_from_snapshot] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -65,6 +65,52 @@ def disk_from_snapshot( return disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -119,7 +165,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -175,19 +220,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_start_instance/create_with_additional_disk.py b/samples/snippets/instances/create_start_instance/create_with_additional_disk.py index a14005eb5..b506a9f09 100644 --- a/samples/snippets/instances/create_start_instance/create_with_additional_disk.py +++ b/samples/snippets/instances/create_start_instance/create_with_additional_disk.py @@ -22,9 +22,9 @@ # [START compute_instances_create_from_image_plus_empty_disk] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -113,6 +113,52 @@ def empty_disk( return disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -167,7 +213,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -223,19 +268,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_start_instance/create_with_existing_disks.py b/samples/snippets/instances/create_start_instance/create_with_existing_disks.py index df36012ea..121582d91 100644 --- a/samples/snippets/instances/create_start_instance/create_with_existing_disks.py +++ b/samples/snippets/instances/create_start_instance/create_with_existing_disks.py @@ -22,9 +22,9 @@ # [START compute_instances_create_with_existing_disks] import re import sys -import time -from typing import Iterable, List, NoReturn +from typing import Any, Iterable, List, NoReturn +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -41,6 +41,52 @@ def get_disk(project_id: str, zone: str, disk_name: str) -> compute_v1.Disk: return disk_client.get(project=project_id, zone=zone, disk=disk_name) +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -95,7 +141,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -151,19 +196,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_start_instance/create_with_snapshotted_data_disk.py b/samples/snippets/instances/create_start_instance/create_with_snapshotted_data_disk.py index 0385c17ab..dbffbb174 100644 --- a/samples/snippets/instances/create_start_instance/create_with_snapshotted_data_disk.py +++ b/samples/snippets/instances/create_start_instance/create_with_snapshotted_data_disk.py @@ -22,9 +22,9 @@ # [START compute_instances_create_from_image_plus_snapshot_disk] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -120,6 +120,52 @@ def disk_from_snapshot( return disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -174,7 +220,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -230,19 +275,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/create_with_subnet.py b/samples/snippets/instances/create_with_subnet.py index 27a52a9f7..3c28b8470 100644 --- a/samples/snippets/instances/create_with_subnet.py +++ b/samples/snippets/instances/create_with_subnet.py @@ -22,9 +22,9 @@ # [START compute_instances_create_with_subnet] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/custom_hostname/create.py b/samples/snippets/instances/custom_hostname/create.py index 699f6397e..377a3169f 100644 --- a/samples/snippets/instances/custom_hostname/create.py +++ b/samples/snippets/instances/custom_hostname/create.py @@ -22,9 +22,9 @@ # [START compute_instances_create_custom_hostname] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/custom_machine_types/create_shared_with_helper.py b/samples/snippets/instances/custom_machine_types/create_shared_with_helper.py index 7674013d4..4f37ae2a2 100644 --- a/samples/snippets/instances/custom_machine_types/create_shared_with_helper.py +++ b/samples/snippets/instances/custom_machine_types/create_shared_with_helper.py @@ -25,9 +25,9 @@ from enum import unique import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -277,6 +277,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -331,7 +377,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -387,19 +432,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/custom_machine_types/create_with_helper.py b/samples/snippets/instances/custom_machine_types/create_with_helper.py index 5821f160b..499c63059 100644 --- a/samples/snippets/instances/custom_machine_types/create_with_helper.py +++ b/samples/snippets/instances/custom_machine_types/create_with_helper.py @@ -25,9 +25,9 @@ from enum import unique import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -277,6 +277,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -331,7 +377,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -387,19 +432,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/custom_machine_types/create_without_helper.py b/samples/snippets/instances/custom_machine_types/create_without_helper.py index 54e208b6d..d7e13d8c1 100644 --- a/samples/snippets/instances/custom_machine_types/create_without_helper.py +++ b/samples/snippets/instances/custom_machine_types/create_without_helper.py @@ -22,9 +22,9 @@ # [START compute_custom_machine_type_create_without_helper] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/custom_machine_types/extra_mem_no_helper.py b/samples/snippets/instances/custom_machine_types/extra_mem_no_helper.py index 9449ef11f..059750328 100644 --- a/samples/snippets/instances/custom_machine_types/extra_mem_no_helper.py +++ b/samples/snippets/instances/custom_machine_types/extra_mem_no_helper.py @@ -22,9 +22,9 @@ # [START compute_custom_machine_type_extra_mem_no_helper] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/custom_machine_types/update_memory.py b/samples/snippets/instances/custom_machine_types/update_memory.py index b65c94344..b61a2a2b5 100644 --- a/samples/snippets/instances/custom_machine_types/update_memory.py +++ b/samples/snippets/instances/custom_machine_types/update_memory.py @@ -20,11 +20,60 @@ # [START compute_custom_machine_type_update_memory] +import sys import time +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def add_extended_memory_to_instance( project_id: str, zone: str, instance_name: str, new_memory: int ): @@ -41,7 +90,6 @@ def add_extended_memory_to_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() instance = instance_client.get( project=project_id, zone=zone, instance=instance_name ) @@ -58,10 +106,10 @@ def add_extended_memory_to_instance( instance.Status.TERMINATED.name, instance.Status.STOPPED.name, ): - op = instance_client.stop_unary( + operation = instance_client.stop( project=project_id, zone=zone, instance=instance_name ) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + wait_for_extended_operation(operation, "instance stopping") start = time.time() while instance.status not in ( instance.Status.TERMINATED.name, @@ -84,13 +132,13 @@ def add_extended_memory_to_instance( # cmt.memory_mb = new_memory # cmt.extra_memory_used = True # instance.machine_type = str(cmt) - op = instance_client.update_unary( + operation = instance_client.update( project=project_id, zone=zone, instance=instance_name, instance_resource=instance, ) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + wait_for_extended_operation(operation, "instance update") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/delete.py b/samples/snippets/instances/delete.py index 55cdfe9c7..af8474558 100644 --- a/samples/snippets/instances/delete.py +++ b/samples/snippets/instances/delete.py @@ -22,10 +22,58 @@ # [START compute_instances_delete] import sys import time +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def delete_instance(project_id: str, zone: str, machine_name: str) -> None: """ Send an instance deletion request to the Compute Engine API and wait for it to complete. @@ -36,24 +84,12 @@ def delete_instance(project_id: str, zone: str, machine_name: str) -> None: machine_name: name of the machine you want to delete. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() print(f"Deleting {machine_name} from {zone}...") - operation = instance_client.delete_unary( + operation = instance_client.delete( project=project_id, zone=zone, instance=machine_name ) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during deletion:", operation.error, file=sys.stderr) - return - if operation.warnings: - print("Warning during deletion:", operation.warnings, file=sys.stderr) + wait_for_extended_operation(operation, "instance deletion") print(f"Instance {machine_name} deleted.") return diff --git a/samples/snippets/instances/delete_protection/create.py b/samples/snippets/instances/delete_protection/create.py index 15d31f102..fe9d26e60 100644 --- a/samples/snippets/instances/delete_protection/create.py +++ b/samples/snippets/instances/delete_protection/create.py @@ -22,9 +22,9 @@ # [START compute_delete_protection_create] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/delete_protection/set.py b/samples/snippets/instances/delete_protection/set.py index 47c3b35ba..3a6008306 100644 --- a/samples/snippets/instances/delete_protection/set.py +++ b/samples/snippets/instances/delete_protection/set.py @@ -20,9 +20,59 @@ # [START compute_delete_protection_set] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def set_delete_protection( project_id: str, zone: str, instance_name: str, delete_protection: bool ) -> None: @@ -36,7 +86,6 @@ def set_delete_protection( protected against deletion or not. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() request = compute_v1.SetDeletionProtectionInstanceRequest() request.project = project_id @@ -44,8 +93,8 @@ def set_delete_protection( request.resource = instance_name request.deletion_protection = delete_protection - operation = instance_client.set_deletion_protection_unary(request) - operation_client.wait(project=project_id, zone=zone, operation=operation.name) + operation = instance_client.set_deletion_protection(request) + wait_for_extended_operation(operation, "changing delete protection setting") return diff --git a/samples/snippets/instances/from_instance_template/create_from_template.py b/samples/snippets/instances/from_instance_template/create_from_template.py index 6310cfd11..3abd6cc46 100644 --- a/samples/snippets/instances/from_instance_template/create_from_template.py +++ b/samples/snippets/instances/from_instance_template/create_from_template.py @@ -20,9 +20,59 @@ # [START compute_instances_create_from_template] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance_from_template( project_id: str, zone: str, instance_name: str, instance_template_url: str ) -> compute_v1.Instance: @@ -43,7 +93,6 @@ def create_instance_from_template( Returns: Instance object. """ - operation_client = compute_v1.ZoneOperationsClient() instance_client = compute_v1.InstancesClient() instance_insert_request = compute_v1.InsertInstanceRequest() @@ -52,8 +101,8 @@ def create_instance_from_template( instance_insert_request.source_instance_template = instance_template_url instance_insert_request.instance_resource.name = instance_name - op = instance_client.insert_unary(instance_insert_request) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + operation = instance_client.insert(instance_insert_request) + wait_for_extended_operation(operation, "instance creation") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/from_instance_template/create_from_template_with_overrides.py b/samples/snippets/instances/from_instance_template/create_from_template_with_overrides.py index 6f76d3290..eca6f0a49 100644 --- a/samples/snippets/instances/from_instance_template/create_from_template_with_overrides.py +++ b/samples/snippets/instances/from_instance_template/create_from_template_with_overrides.py @@ -20,9 +20,59 @@ # [START compute_instances_create_from_template_with_overrides] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance_from_template_with_overrides( project_id: str, zone: str, @@ -55,7 +105,6 @@ def create_instance_from_template_with_overrides( Returns: Instance object. """ - operation_client = compute_v1.ZoneOperationsClient() instance_client = compute_v1.InstancesClient() instance_template_client = compute_v1.InstanceTemplatesClient() @@ -92,8 +141,8 @@ def create_instance_from_template_with_overrides( instance_insert_request.instance_resource = instance instance_insert_request.source_instance_template = instance_template.self_link - op = instance_client.insert_unary(instance_insert_request) - operation_client.wait(project=project_id, zone=zone, operation=op.name) + operation = instance_client.insert(instance_insert_request) + wait_for_extended_operation(operation, "instance creation") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/preemptible/create_preemptible.py b/samples/snippets/instances/preemptible/create_preemptible.py index 5cc7ff47d..3e2ef4b89 100644 --- a/samples/snippets/instances/preemptible/create_preemptible.py +++ b/samples/snippets/instances/preemptible/create_preemptible.py @@ -22,9 +22,9 @@ # [START compute_preemptible_create] import re import sys -import time -from typing import List +from typing import Any, List +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -83,6 +83,52 @@ def disk_from_image( return boot_disk +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_instance( project_id: str, zone: str, @@ -137,7 +183,6 @@ def create_instance( Instance object. """ instance_client = compute_v1.InstancesClient() - operation_client = compute_v1.ZoneOperationsClient() # Use the network interface provided in the network_link argument. network_interface = compute_v1.NetworkInterface() @@ -193,19 +238,10 @@ def create_instance( # Wait for the create operation to complete. print(f"Creating the {instance_name} instance in {zone}...") - operation = instance_client.insert_unary(request=request) - start = time.time() - while operation.status != compute_v1.Operation.Status.DONE: - operation = operation_client.wait( - operation=operation.name, zone=zone, project=project_id - ) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() - if operation.error: - print("Error during creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warning during creation:", operation.warnings, file=sys.stderr) + operation = instance_client.insert(request=request) + + wait_for_extended_operation(operation, "instance creation") + print(f"Instance {instance_name} created.") return instance_client.get(project=project_id, zone=zone, instance=instance_name) diff --git a/samples/snippets/instances/reset.py b/samples/snippets/instances/reset.py index a04003f17..1764ab632 100644 --- a/samples/snippets/instances/reset.py +++ b/samples/snippets/instances/reset.py @@ -20,11 +20,60 @@ # [START compute_reset_instance] +import sys import time +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def reset_instance(project_id: str, zone: str, instance_name: str) -> None: """ Resets a stopped Google Compute Engine instance (with unencrypted disks). @@ -34,17 +83,13 @@ def reset_instance(project_id: str, zone: str, instance_name: str) -> None: instance_name: name of the instance your want to reset. """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() - op = instance_client.reset_unary( + operation = instance_client.reset( project=project_id, zone=zone, instance=instance_name ) - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance reset") + return diff --git a/samples/snippets/instances/resume.py b/samples/snippets/instances/resume.py new file mode 100644 index 000000000..2c6cf68cb --- /dev/null +++ b/samples/snippets/instances/resume.py @@ -0,0 +1,104 @@ +# Copyright 2022 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. +# flake8: noqa + + +# This file is automatically generated. Please do not modify it directly. +# Find the relevant recipe file in the samples/recipes or samples/ingredients +# directory and apply your changes there. + + +# [START compute_resume_instance] +import sys +import time +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation +from google.cloud import compute_v1 + + +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + +def resume_instance(project_id: str, zone: str, instance_name: str) -> None: + """ + Resume a suspended Google Compute Engine instance (with unencrypted disks). + Args: + project_id: project ID or project number of the Cloud project your instance belongs to. + zone: name of the zone your instance belongs to. + instance_name: name of the instance your want to resume. + """ + instance_client = compute_v1.InstancesClient() + + instance = instance_client.get( + project=project_id, zone=zone, instance=instance_name + ) + if instance.status != compute_v1.Instance.Status.SUSPENDED.name: + raise RuntimeError( + f"Only suspended instances can be resumed. " + f"Instance {instance_name} is in {instance.status} state." + ) + + operation = instance_client.resume( + project=project_id, zone=zone, instance=instance_name + ) + + wait_for_extended_operation(operation, "instance resumption") + return + + +# [END compute_resume_instance] diff --git a/samples/snippets/instances/start.py b/samples/snippets/instances/start.py index 4548a8cd9..9dbf039ae 100644 --- a/samples/snippets/instances/start.py +++ b/samples/snippets/instances/start.py @@ -20,11 +20,60 @@ # [START compute_start_instance] +import sys import time +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def start_instance(project_id: str, zone: str, instance_name: str) -> None: """ Starts a stopped Google Compute Engine instance (with unencrypted disks). @@ -34,17 +83,12 @@ def start_instance(project_id: str, zone: str, instance_name: str) -> None: instance_name: name of the instance your want to start. """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() - op = instance_client.start_unary( + operation = instance_client.start( project=project_id, zone=zone, instance=instance_name ) - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance start") return diff --git a/samples/snippets/instances/start_encrypted.py b/samples/snippets/instances/start_encrypted.py index 401b2b0cc..ef08fb1dd 100644 --- a/samples/snippets/instances/start_encrypted.py +++ b/samples/snippets/instances/start_encrypted.py @@ -20,11 +20,60 @@ # [START compute_start_enc_instance] +import sys import time +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def start_instance_with_encryption_key( project_id: str, zone: str, instance_name: str, key: bytes ): @@ -39,7 +88,6 @@ def start_instance_with_encryption_key( https://cloud.google.com/compute/docs/disks/customer-supplied-encryption#specifications """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() instance_data = instance_client.get( project=project_id, zone=zone, instance=instance_name @@ -55,18 +103,14 @@ def start_instance_with_encryption_key( enc_data = compute_v1.InstancesStartWithEncryptionKeyRequest() enc_data.disks = [disk_data] - op = instance_client.start_with_encryption_key_unary( + operation = instance_client.start_with_encryption_key( project=project_id, zone=zone, instance=instance_name, instances_start_with_encryption_key_request_resource=enc_data, ) - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance start (with encrypted disk)") return diff --git a/samples/snippets/instances/stop.py b/samples/snippets/instances/stop.py index b8b2f8b4e..7cbaeb16b 100644 --- a/samples/snippets/instances/stop.py +++ b/samples/snippets/instances/stop.py @@ -20,11 +20,60 @@ # [START compute_stop_instance] +import sys import time +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def stop_instance(project_id: str, zone: str, instance_name: str) -> None: """ Stops a running Google Compute Engine instance. @@ -34,17 +83,11 @@ def stop_instance(project_id: str, zone: str, instance_name: str) -> None: instance_name: name of the instance your want to stop. """ instance_client = compute_v1.InstancesClient() - op_client = compute_v1.ZoneOperationsClient() - op = instance_client.stop_unary( + operation = instance_client.stop( project=project_id, zone=zone, instance=instance_name ) - - start = time.time() - while op.status != compute_v1.Operation.Status.DONE: - op = op_client.wait(operation=op.name, zone=zone, project=project_id) - if time.time() - start >= 300: # 5 minutes - raise TimeoutError() + wait_for_extended_operation(operation, "instance stopping") return diff --git a/samples/snippets/instances/suspend.py b/samples/snippets/instances/suspend.py new file mode 100644 index 000000000..bf4a4c30d --- /dev/null +++ b/samples/snippets/instances/suspend.py @@ -0,0 +1,95 @@ +# Copyright 2022 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. +# flake8: noqa + + +# This file is automatically generated. Please do not modify it directly. +# Find the relevant recipe file in the samples/recipes or samples/ingredients +# directory and apply your changes there. + + +# [START compute_suspend_instance] +import sys +import time +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation +from google.cloud import compute_v1 + + +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + +def suspend_instance(project_id: str, zone: str, instance_name: str) -> None: + """ + Suspend a running Google Compute Engine instance. + Args: + project_id: project ID or project number of the Cloud project your instance belongs to. + zone: name of the zone your instance belongs to. + instance_name: name of the instance your want to suspend. + """ + instance_client = compute_v1.InstancesClient() + + operation = instance_client.suspend( + project=project_id, zone=zone, instance=instance_name + ) + + wait_for_extended_operation(operation, "instance suspend") + return + + +# [END compute_suspend_instance] diff --git a/samples/snippets/snapshots/create.py b/samples/snippets/snapshots/create.py index adfdf8e28..0e9a472df 100644 --- a/samples/snippets/snapshots/create.py +++ b/samples/snippets/snapshots/create.py @@ -21,10 +21,58 @@ # [START compute_snapshot_create] import sys +from typing import Any +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def create_snapshot( project_id: str, zone: str, disk_name: str, snapshot_name: str ) -> compute_v1.Snapshot: @@ -47,19 +95,9 @@ def create_snapshot( snapshot.name = snapshot_name snapshot_client = compute_v1.SnapshotsClient() - operation = snapshot_client.insert_unary( - project=project_id, snapshot_resource=snapshot - ) - op_client = compute_v1.GlobalOperationsClient() - operation = op_client.wait(project=project_id, operation=operation.name) - - if operation.error: - print("Error during snapshot creation:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during snapshot creation:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + operation = snapshot_client.insert(project=project_id, snapshot_resource=snapshot) + + wait_for_extended_operation(operation, "snapshot creation") return snapshot_client.get(project=project_id, snapshot=snapshot_name) diff --git a/samples/snippets/snapshots/delete.py b/samples/snippets/snapshots/delete.py index ffa0abab5..ebbf0e04b 100644 --- a/samples/snippets/snapshots/delete.py +++ b/samples/snippets/snapshots/delete.py @@ -21,11 +21,58 @@ # [START compute_snapshot_delete] import sys -from typing import NoReturn +from typing import Any, NoReturn +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def delete_snapshot(project_id: str, snapshot_name: str) -> NoReturn: """ Delete a snapshot of a disk. @@ -36,17 +83,9 @@ def delete_snapshot(project_id: str, snapshot_name: str) -> NoReturn: """ snapshot_client = compute_v1.SnapshotsClient() - operation = snapshot_client.delete_unary(project=project_id, snapshot=snapshot_name) - op_client = compute_v1.GlobalOperationsClient() - operation = op_client.wait(project=project_id, operation=operation.name) + operation = snapshot_client.delete(project=project_id, snapshot=snapshot_name) - if operation.error: - print("Error during snapshot deletion:", operation.error, file=sys.stderr) - raise RuntimeError(operation.error) - if operation.warnings: - print("Warnings during snapshot deletion:\n", file=sys.stderr) - for warning in operation.warnings: - print(f" - {warning.code}: {warning.message}", file=sys.stderr) + wait_for_extended_operation(operation, "snapshot deletion") return diff --git a/samples/snippets/tests/test_create_vm.py b/samples/snippets/tests/test_create_vm.py index fbda262ea..58382ed92 100644 --- a/samples/snippets/tests/test_create_vm.py +++ b/samples/snippets/tests/test_create_vm.py @@ -230,9 +230,6 @@ def test_create_with_existing_disks(boot_disk, empty_disk): [boot_disk.name, empty_disk.name]) try: - print(instance.disks) - for disk in instance.disks: - print(disk, dir(disk), type(disk), disk.disk_size_gb) assert any( disk.disk_size_gb == 13 for disk in instance.disks ) diff --git a/samples/snippets/tests/test_instance_suspend_resume.py b/samples/snippets/tests/test_instance_suspend_resume.py new file mode 100644 index 000000000..a6f2ca103 --- /dev/null +++ b/samples/snippets/tests/test_instance_suspend_resume.py @@ -0,0 +1,69 @@ +# Copyright 2022 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 time +import uuid + +import google.auth +from google.cloud import compute_v1 +import pytest + + +from ..images.get import get_image_from_family +from ..instances.create import create_instance, disk_from_image +from ..instances.delete import delete_instance +from ..instances.resume import resume_instance +from ..instances.suspend import suspend_instance + +PROJECT = google.auth.default()[1] + +INSTANCE_ZONE = "europe-central2-b" + + +def _get_status(instance: compute_v1.Instance) -> compute_v1.Instance.Status: + instance_client = compute_v1.InstancesClient() + return instance_client.get( + project=PROJECT, zone=INSTANCE_ZONE, instance=instance.name + ).status + + +@pytest.fixture +def compute_instance(): + instance_name = "test-instance-" + uuid.uuid4().hex[:10] + newest_debian = get_image_from_family(project="ubuntu-os-cloud", family="ubuntu-2004-lts") + disk_type = f"zones/{INSTANCE_ZONE}/diskTypes/pd-standard" + disks = [disk_from_image(disk_type, 100, True, newest_debian.self_link)] + instance = create_instance( + PROJECT, INSTANCE_ZONE, instance_name, disks + ) + yield instance + + delete_instance(PROJECT, INSTANCE_ZONE, instance_name) + + +def test_instance_suspend_resume(compute_instance): + assert _get_status(compute_instance) == compute_v1.Instance.Status.RUNNING.name + + # Once the machine is running, give it some time to fully start all processes + # before trying to suspend it + time.sleep(45) + + suspend_instance(PROJECT, INSTANCE_ZONE, compute_instance.name) + + while _get_status(compute_instance) == compute_v1.Instance.Status.SUSPENDING.name: + time.sleep(5) + + assert _get_status(compute_instance) == compute_v1.Instance.Status.SUSPENDED.name + + resume_instance(PROJECT, INSTANCE_ZONE, compute_instance.name) + assert _get_status(compute_instance) == compute_v1.Instance.Status.RUNNING.name diff --git a/samples/snippets/usage_report/usage_reports.py b/samples/snippets/usage_report/usage_reports.py index 85e5ea9cd..1c89bf3e8 100644 --- a/samples/snippets/usage_report/usage_reports.py +++ b/samples/snippets/usage_report/usage_reports.py @@ -26,6 +26,10 @@ # [START compute_usage_report_set] # [START compute_usage_report_get] # [START compute_usage_report_disable] +import sys +from typing import Any + +from google.api_core.extended_operation import ExtendedOperation from google.cloud import compute_v1 @@ -35,6 +39,54 @@ # [START compute_usage_report_set] + + +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def set_usage_export_bucket( project_id: str, bucket_name: str, report_name_prefix: str = "" ) -> None: @@ -64,14 +116,11 @@ def set_usage_export_bucket( ) projects_client = compute_v1.ProjectsClient() - operation = projects_client.set_usage_export_bucket_unary( + operation = projects_client.set_usage_export_bucket( project=project_id, usage_export_location_resource=usage_export_location ) - op_client = compute_v1.GlobalOperationsClient() - - while operation.status != compute_v1.Operation.Status.DONE: - operation = op_client.wait(operation=operation.name, project=project_id) + wait_for_extended_operation(operation, "setting GCE usage bucket") # [END compute_usage_report_set] @@ -115,6 +164,54 @@ def get_usage_export_bucket(project_id: str) -> compute_v1.UsageExportLocation: # [START compute_usage_report_disable] + + +def wait_for_extended_operation( + operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300 +) -> Any: + """ + This method will wait for the extended (long-running) operation to + complete. If the operation is successful, it will return its result. + If the operation ends with an error, an exception will be raised. + If there were any warnings during the execution of the operation + they will be printed to sys.stderr. + + Args: + operation: a long-running operation you want to wait on. + verbose_name: (optional) a more verbose name of the operation, + used only during error and warning reporting. + timeout: how long (in seconds) to wait for operation to finish. + If None, wait indefinitely. + + Returns: + Whatever the operation.result() returns. + + Raises: + This method will raise the exception received from `operation.exception()` + or RuntimeError if there is no exception set, but there is an `error_code` + set for the `operation`. + + In case of an operation taking longer than `timeout` seconds to complete, + a `concurrent.futures.TimeoutError` will be raised. + """ + result = operation.result(timeout=timeout) + + if operation.error_code: + print( + f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}", + file=sys.stderr, + ) + print(f"Operation ID: {operation.name}") + raise operation.exception() or RuntimeError(operation.error_message) + + if operation.warnings: + print(f"Warnings during {verbose_name}:\n", file=sys.stderr) + for warning in operation.warnings: + print(f" - {warning.code}: {warning.message}", file=sys.stderr) + + return result + + def disable_usage_export(project_id: str) -> None: """ Disable Compute Engine usage export bucket for the Cloud Project. @@ -126,14 +223,11 @@ def disable_usage_export(project_id: str) -> None: # Setting `usage_export_location_resource` to an # empty object will disable the usage report generation. - operation = projects_client.set_usage_export_bucket_unary( + operation = projects_client.set_usage_export_bucket( project=project_id, usage_export_location_resource={} ) - op_client = compute_v1.GlobalOperationsClient() - - while operation.status != compute_v1.Operation.Status.DONE: - operation = op_client.wait(operation=operation.name, project=project_id) + wait_for_extended_operation(operation, "disabling GCE usage bucket") # [END compute_usage_report_disable] diff --git a/setup.py b/setup.py index e4faf73aa..54647dbf5 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ import os import setuptools # type: ignore -version = "1.2.0" +version = "1.3.0" package_root = os.path.abspath(os.path.dirname(__file__)) @@ -44,7 +44,7 @@ platforms="Posix; MacOS X; Windows", include_package_data=True, install_requires=( - "google-api-core[grpc] >= 2.4.0, <3.0.0dev", + "google-api-core[grpc] >= 2.7.0, <3.0.0dev", "proto-plus >= 1.19.7", "dataclasses >= 0.6; python_version < '3.7'", ), diff --git a/testing/constraints-3.6.txt b/testing/constraints-3.6.txt index 3931a2ca4..3ab1eb09b 100644 --- a/testing/constraints-3.6.txt +++ b/testing/constraints-3.6.txt @@ -5,6 +5,6 @@ # 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==2.4.0 +google-api-core==2.7.0 proto-plus==1.19.7 dataclasses==0.6.0 diff --git a/tests/unit/gapic/compute_v1/test_accelerator_types.py b/tests/unit/gapic/compute_v1/test_accelerator_types.py index a8223fd67..153d59834 100644 --- a/tests/unit/gapic/compute_v1/test_accelerator_types.py +++ b/tests/unit/gapic/compute_v1/test_accelerator_types.py @@ -1622,6 +1622,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = AcceleratorTypesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_accelerator_types_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1655,6 +1668,14 @@ def test_accelerator_types_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_accelerator_types_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_addresses.py b/tests/unit/gapic/compute_v1/test_addresses.py index 8c42368df..fc05e7323 100644 --- a/tests/unit/gapic/compute_v1/test_addresses.py +++ b/tests/unit/gapic/compute_v1/test_addresses.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -862,7 +864,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -906,10 +908,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -934,7 +936,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteAddressRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteAddressRequest): transport_class = transports.AddressesRestTransport request_init = {} @@ -963,9 +965,615 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteAddressReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "address" in jsonified_request + assert jsonified_request["address"] == "address_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_rest_unset_required_fields(): + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "address", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.AddressesRestInterceptor(), + ) + client = AddressesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.AddressesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.AddressesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteAddressRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteAddressRequest +): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "address": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "address": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + address="address_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/addresses/{address}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteAddressRequest(), + project="project_value", + region="region_value", + address="address_value", + ) + + +def test_delete_rest_error(): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteAddressRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "address": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields(request_type=compute.DeleteAddressRequest): + transport_class = transports.AddressesRestTransport + + request_init = {} + request_init["address"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["address"] = "address_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "address" in jsonified_request + assert jsonified_request["address"] == "address_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "address", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.AddressesRestInterceptor(), + ) + client = AddressesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.AddressesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.AddressesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteAddressRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteAddressRequest +): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "address": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "address": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + address="address_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/addresses/{address}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteAddressRequest(), + project="project_value", + region="region_value", + address="address_value", + ) + + +def test_delete_unary_rest_error(): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetAddressRequest, + dict, + ], +) +def test_get_rest(request_type): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "address": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Address( + address="address_value", + address_type="address_type_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + ip_version="ip_version_value", + kind="kind_value", + name="name_value", + network="network_value", + network_tier="network_tier_value", + prefix_length=1391, + purpose="purpose_value", + region="region_value", + self_link="self_link_value", + status="status_value", + subnetwork="subnetwork_value", + users=["users_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Address.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Address) + assert response.address == "address_value" + assert response.address_type == "address_type_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.ip_version == "ip_version_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.network_tier == "network_tier_value" + assert response.prefix_length == 1391 + assert response.purpose == "purpose_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.status == "status_value" + assert response.subnetwork == "subnetwork_value" + assert response.users == ["users_value"] + + +def test_get_rest_required_fields(request_type=compute.GetAddressRequest): + transport_class = transports.AddressesRestTransport + + request_init = {} + request_init["address"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["address"] = "address_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -983,7 +1591,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteAddressReq request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Address() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -994,32 +1602,32 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteAddressReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Address.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.AddressesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "address", @@ -1031,7 +1639,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.AddressesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.AddressesRestInterceptor(), @@ -1042,9 +1650,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.AddressesRestInterceptor, "post_delete" + transports.AddressesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.AddressesRestInterceptor, "pre_delete" + transports.AddressesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1059,17 +1667,17 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Address.to_json(compute.Address()) - request = compute.DeleteAddressRequest() + request = compute.GetAddressRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Address - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1081,8 +1689,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteAddressRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetAddressRequest ): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1102,10 +1710,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1114,7 +1722,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Address() # get arguments that satisfy an http rule for this method sample_request = { @@ -1134,12 +1742,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Address.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1152,7 +1760,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1161,15 +1769,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteAddressRequest(), + client.get( + compute.GetAddressRequest(), project="project_value", region="region_value", address="address_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1178,77 +1786,105 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetAddressRequest, + compute.InsertAddressRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "address": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["address_resource"] = { + "address": "address_value", + "address_type": "address_type_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "ip_version": "ip_version_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "prefix_length": 1391, + "purpose": "purpose_value", + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + "subnetwork": "subnetwork_value", + "users": ["users_value_1", "users_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Address( - address="address_value", - address_type="address_type_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_version="ip_version_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - network_tier="network_tier_value", - prefix_length=1391, - purpose="purpose_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", - subnetwork="subnetwork_value", - users=["users_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Address.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Address) - assert response.address == "address_value" - assert response.address_type == "address_type_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.ip_version == "ip_version_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_tier == "network_tier_value" - assert response.prefix_length == 1391 - assert response.purpose == "purpose_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.status == "status_value" - assert response.subnetwork == "subnetwork_value" - assert response.users == ["users_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetAddressRequest): +def test_insert_rest_required_fields(request_type=compute.InsertAddressRequest): transport_class = transports.AddressesRestTransport request_init = {} - request_init["address"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1262,23 +1898,22 @@ def test_get_rest_required_fields(request_type=compute.GetAddressRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["address"] = "address_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "address" in jsonified_request - assert jsonified_request["address"] == "address_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1291,7 +1926,7 @@ def test_get_rest_required_fields(request_type=compute.GetAddressRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Address() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1302,35 +1937,36 @@ def test_get_rest_required_fields(request_type=compute.GetAddressRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Address.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.AddressesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "address", + "addressResource", "project", "region", ) @@ -1339,7 +1975,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.AddressesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.AddressesRestInterceptor(), @@ -1350,9 +1986,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.AddressesRestInterceptor, "post_get" + transports.AddressesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.AddressesRestInterceptor, "pre_get" + transports.AddressesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1367,17 +2003,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Address.to_json(compute.Address()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetAddressRequest() + request = compute.InsertAddressRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Address + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1389,8 +2025,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetAddressRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertAddressRequest ): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1398,7 +2034,26 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "address": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["address_resource"] = { + "address": "address_value", + "address_type": "address_type_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "ip_version": "ip_version_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "prefix_length": 1391, + "purpose": "purpose_value", + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + "subnetwork": "subnetwork_value", + "users": ["users_value_1", "users_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1410,10 +2065,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1422,45 +2077,41 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Address() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "address": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - address="address_value", + address_resource=compute.Address(address="address_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Address.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/addresses/{address}" + "%s/compute/v1/projects/{project}/regions/{region}/addresses" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1469,15 +2120,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetAddressRequest(), + client.insert( + compute.InsertAddressRequest(), project="project_value", region="region_value", - address="address_value", + address_resource=compute.Address(address="address_value"), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1557,28 +2208,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields(request_type=compute.InsertAddressRequest): @@ -2253,6 +2882,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = AddressesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_addresses_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2288,6 +2930,14 @@ def test_addresses_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_addresses_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_autoscalers.py b/tests/unit/gapic/compute_v1/test_autoscalers.py index 642400d85..e2ab20a3c 100644 --- a/tests/unit/gapic/compute_v1/test_autoscalers.py +++ b/tests/unit/gapic/compute_v1/test_autoscalers.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -871,7 +873,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -915,10 +917,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -943,9 +945,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteAutoscalerRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteAutoscalerRequest): transport_class = transports.AutoscalersRestTransport request_init = {} @@ -1016,14 +1016,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1042,7 +1042,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1082,7 +1082,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1094,7 +1094,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteAutoscalerRequest ): client = AutoscalersClient( @@ -1115,10 +1115,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1152,7 +1152,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1165,7 +1165,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1174,7 +1174,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteAutoscalerRequest(), project="project_value", zone="zone_value", @@ -1182,7 +1182,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1191,11 +1191,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetAutoscalerRequest, + compute.DeleteAutoscalerRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1208,44 +1208,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Autoscaler( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - recommended_size=1693, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", - target="target_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Autoscaler.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Autoscaler) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.recommended_size == 1693 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.status == "status_value" - assert response.target == "target_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetAutoscalerRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteAutoscalerRequest, +): transport_class = transports.AutoscalersRestTransport request_init = {} @@ -1263,7 +1265,7 @@ def test_get_rest_required_fields(request_type=compute.GetAutoscalerRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1274,7 +1276,9 @@ def test_get_rest_required_fields(request_type=compute.GetAutoscalerRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1292,7 +1296,7 @@ def test_get_rest_required_fields(request_type=compute.GetAutoscalerRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Autoscaler() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1303,32 +1307,32 @@ def test_get_rest_required_fields(request_type=compute.GetAutoscalerRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Autoscaler.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "autoscaler", @@ -1340,7 +1344,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1353,9 +1357,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.AutoscalersRestInterceptor, "post_get" + transports.AutoscalersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.AutoscalersRestInterceptor, "pre_get" + transports.AutoscalersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1370,17 +1374,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Autoscaler.to_json(compute.Autoscaler()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetAutoscalerRequest() + request = compute.DeleteAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Autoscaler + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1392,8 +1396,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetAutoscalerRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteAutoscalerRequest ): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1413,10 +1417,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1425,7 +1429,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Autoscaler() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1445,12 +1449,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Autoscaler.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1463,7 +1467,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1472,15 +1476,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetAutoscalerRequest(), + client.delete_unary( + compute.DeleteAutoscalerRequest(), project="project_value", zone="zone_value", autoscaler="autoscaler_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1489,132 +1493,65 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertAutoscalerRequest, + compute.GetAutoscalerRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["autoscaler_resource"] = { - "autoscaling_policy": { - "cool_down_period_sec": 2112, - "cpu_utilization": { - "predictive_method": "predictive_method_value", - "utilization_target": 0.19540000000000002, - }, - "custom_metric_utilizations": [ - { - "filter": "filter_value", - "metric": "metric_value", - "single_instance_assignment": 0.2766, - "utilization_target": 0.19540000000000002, - "utilization_target_type": "utilization_target_type_value", - } - ], - "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, - "max_num_replicas": 1703, - "min_num_replicas": 1701, - "mode": "mode_value", - "scale_in_control": { - "max_scaled_in_replicas": { - "calculated": 1042, - "fixed": 528, - "percent": 753, - }, - "time_window_sec": 1600, - }, - "scaling_schedules": {}, - }, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recommended_size": 1693, - "region": "region_value", - "scaling_schedule_status": {}, - "self_link": "self_link_value", - "status": "status_value", - "status_details": [{"message": "message_value", "type_": "type__value"}], - "target": "target_value", - "zone": "zone_value", - } + request_init = {"project": "sample1", "zone": "sample2", "autoscaler": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Autoscaler( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + recommended_size=1693, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", + status="status_value", + target="target_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Autoscaler.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Autoscaler) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.recommended_size == 1693 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" + assert response.status == "status_value" + assert response.target == "target_value" assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertAutoscalerRequest, -): +def test_get_rest_required_fields(request_type=compute.GetAutoscalerRequest): transport_class = transports.AutoscalersRestTransport request_init = {} + request_init["autoscaler"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -1628,22 +1565,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["autoscaler"] = "autoscaler_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "autoscaler" in jsonified_request + assert jsonified_request["autoscaler"] == "autoscaler_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -1656,7 +1594,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Autoscaler() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1667,36 +1605,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Autoscaler.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "autoscalerResource", + "autoscaler", "project", "zone", ) @@ -1705,7 +1642,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1718,9 +1655,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.AutoscalersRestInterceptor, "post_insert" + transports.AutoscalersRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.AutoscalersRestInterceptor, "pre_insert" + transports.AutoscalersRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1735,17 +1672,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Autoscaler.to_json(compute.Autoscaler()) - request = compute.InsertAutoscalerRequest() + request = compute.GetAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Autoscaler - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1757,8 +1694,1523 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertAutoscalerRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetAutoscalerRequest +): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "autoscaler": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Autoscaler() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "autoscaler": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + autoscaler="autoscaler_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Autoscaler.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/autoscalers/{autoscaler}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetAutoscalerRequest(), + project="project_value", + zone="zone_value", + autoscaler="autoscaler_value", + ) + + +def test_get_rest_error(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertAutoscalerRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertAutoscalerRequest): + transport_class = transports.AutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "autoscalerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.AutoscalersRestInterceptor(), + ) + client = AutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.AutoscalersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.AutoscalersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertAutoscalerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertAutoscalerRequest +): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/autoscalers" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertAutoscalerRequest(), + project="project_value", + zone="zone_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + + +def test_insert_rest_error(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertAutoscalerRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertAutoscalerRequest, +): + transport_class = transports.AutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "autoscalerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.AutoscalersRestInterceptor(), + ) + client = AutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.AutoscalersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.AutoscalersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertAutoscalerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertAutoscalerRequest +): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/autoscalers" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertAutoscalerRequest(), + project="project_value", + zone="zone_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + + +def test_insert_unary_rest_error(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListAutoscalersRequest, + dict, + ], +) +def test_list_rest(request_type): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.AutoscalerList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.AutoscalerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListAutoscalersRequest): + transport_class = transports.AutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.AutoscalerList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.AutoscalerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.AutoscalersRestInterceptor(), + ) + client = AutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.AutoscalersRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.AutoscalersRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.AutoscalerList.to_json( + compute.AutoscalerList() + ) + + request = compute.ListAutoscalersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.AutoscalerList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListAutoscalersRequest +): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.AutoscalerList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.AutoscalerList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/autoscalers" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListAutoscalersRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.AutoscalerList( + items=[ + compute.Autoscaler(), + compute.Autoscaler(), + compute.Autoscaler(), + ], + next_page_token="abc", + ), + compute.AutoscalerList( + items=[], + next_page_token="def", + ), + compute.AutoscalerList( + items=[ + compute.Autoscaler(), + ], + next_page_token="ghi", + ), + compute.AutoscalerList( + items=[ + compute.Autoscaler(), + compute.Autoscaler(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.AutoscalerList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Autoscaler) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchAutoscalerRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchAutoscalerRequest): + transport_class = transports.AutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "autoscaler", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = AutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "autoscaler", + "requestId", + ) + ) + & set( + ( + "autoscalerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.AutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.AutoscalersRestInterceptor(), + ) + client = AutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.AutoscalersRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.AutoscalersRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchAutoscalerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchAutoscalerRequest ): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1822,10 +3274,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1857,7 +3309,7 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1870,7 +3322,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1879,8 +3331,8 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertAutoscalerRequest(), + client.patch( + compute.PatchAutoscalerRequest(), project="project_value", zone="zone_value", autoscaler_resource=compute.Autoscaler( @@ -1889,7 +3341,7 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1898,11 +3350,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListAutoscalersRequest, + compute.PatchAutoscalerRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1910,35 +3362,93 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.AutoscalerList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.AutoscalerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListAutoscalersRequest): +def test_patch_unary_rest_required_fields(request_type=compute.PatchAutoscalerRequest): transport_class = transports.AutoscalersRestTransport request_init = {} @@ -1955,7 +3465,7 @@ def test_list_rest_required_fields(request_type=compute.ListAutoscalersRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1965,15 +3475,12 @@ def test_list_rest_required_fields(request_type=compute.ListAutoscalersRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", + "autoscaler", + "request_id", ) ) jsonified_request.update(unset_fields) @@ -1991,7 +3498,7 @@ def test_list_rest_required_fields(request_type=compute.ListAutoscalersRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.AutoscalerList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2002,42 +3509,41 @@ def test_list_rest_required_fields(request_type=compute.ListAutoscalersRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.AutoscalerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "autoscaler", + "requestId", ) ) & set( ( + "autoscalerResource", "project", "zone", ) @@ -2046,7 +3552,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2059,9 +3565,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.AutoscalersRestInterceptor, "post_list" + transports.AutoscalersRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.AutoscalersRestInterceptor, "pre_list" + transports.AutoscalersRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2076,19 +3582,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.AutoscalerList.to_json( - compute.AutoscalerList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListAutoscalersRequest() + request = compute.PatchAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AutoscalerList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -2100,8 +3604,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListAutoscalersRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchAutoscalerRequest ): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2110,6 +3614,50 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2121,10 +3669,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2133,7 +3681,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.AutoscalerList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "zone": "sample2"} @@ -2142,18 +3690,21 @@ def test_list_rest_flattened(): mock_args = dict( project="project_value", zone="zone_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.AutoscalerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2166,7 +3717,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2175,82 +3726,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListAutoscalersRequest(), + client.patch_unary( + compute.PatchAutoscalerRequest(), project="project_value", zone="zone_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = AutoscalersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.AutoscalerList( - items=[ - compute.Autoscaler(), - compute.Autoscaler(), - compute.Autoscaler(), - ], - next_page_token="abc", - ), - compute.AutoscalerList( - items=[], - next_page_token="def", - ), - compute.AutoscalerList( - items=[ - compute.Autoscaler(), - ], - next_page_token="ghi", - ), - compute.AutoscalerList( - items=[ - compute.Autoscaler(), - compute.Autoscaler(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.AutoscalerList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Autoscaler) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchAutoscalerRequest, + compute.UpdateAutoscalerRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2338,10 +3837,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2366,7 +3865,7 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchAutoscalerRequest): +def test_update_rest_required_fields(request_type=compute.UpdateAutoscalerRequest): transport_class = transports.AutoscalersRestTransport request_init = {} @@ -2383,7 +3882,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchAutoscalerRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2393,7 +3892,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchAutoscalerRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -2427,7 +3926,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchAutoscalerRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2439,19 +3938,19 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchAutoscalerRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( @@ -2470,7 +3969,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.AutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2483,9 +3982,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.AutoscalersRestInterceptor, "post_patch" + transports.AutoscalersRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.AutoscalersRestInterceptor, "pre_patch" + transports.AutoscalersRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2502,7 +4001,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchAutoscalerRequest() + request = compute.UpdateAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2510,7 +4009,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2522,8 +4021,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchAutoscalerRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateAutoscalerRequest ): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2587,10 +4086,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2622,7 +4121,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2635,7 +4134,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2644,8 +4143,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchAutoscalerRequest(), + client.update( + compute.UpdateAutoscalerRequest(), project="project_value", zone="zone_value", autoscaler_resource=compute.Autoscaler( @@ -2654,7 +4153,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = AutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2759,28 +4258,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -3154,6 +4631,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = AutoscalersClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_autoscalers_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3191,6 +4681,14 @@ def test_autoscalers_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_autoscalers_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_backend_buckets.py b/tests/unit/gapic/compute_v1/test_backend_buckets.py index 67ca3c614..fbf4ee56e 100644 --- a/tests/unit/gapic/compute_v1/test_backend_buckets.py +++ b/tests/unit/gapic/compute_v1/test_backend_buckets.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -525,7 +527,7 @@ def test_backend_buckets_client_client_options_credentials_file( dict, ], ) -def test_add_signed_url_key_unary_rest(request_type): +def test_add_signed_url_key_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -573,10 +575,10 @@ def test_add_signed_url_key_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_signed_url_key_unary(request) + response = client.add_signed_url_key(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -601,7 +603,7 @@ def test_add_signed_url_key_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_signed_url_key_unary_rest_required_fields( +def test_add_signed_url_key_rest_required_fields( request_type=compute.AddSignedUrlKeyBackendBucketRequest, ): transport_class = transports.BackendBucketsRestTransport @@ -671,14 +673,14 @@ def test_add_signed_url_key_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_signed_url_key_unary(request) + response = client.add_signed_url_key(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_signed_url_key_unary_rest_unset_required_fields(): +def test_add_signed_url_key_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -697,7 +699,7 @@ def test_add_signed_url_key_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): +def test_add_signed_url_key_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -737,7 +739,7 @@ def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_signed_url_key_unary( + client.add_signed_url_key( request, metadata=[ ("key", "val"), @@ -749,7 +751,7 @@ def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_signed_url_key_unary_rest_bad_request( +def test_add_signed_url_key_rest_bad_request( transport: str = "rest", request_type=compute.AddSignedUrlKeyBackendBucketRequest ): client = BackendBucketsClient( @@ -774,10 +776,10 @@ def test_add_signed_url_key_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_signed_url_key_unary(request) + client.add_signed_url_key(request) -def test_add_signed_url_key_unary_rest_flattened(): +def test_add_signed_url_key_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -807,7 +809,7 @@ def test_add_signed_url_key_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_signed_url_key_unary(**mock_args) + client.add_signed_url_key(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -820,7 +822,7 @@ def test_add_signed_url_key_unary_rest_flattened(): ) -def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): +def test_add_signed_url_key_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -829,7 +831,7 @@ def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_signed_url_key_unary( + client.add_signed_url_key( compute.AddSignedUrlKeyBackendBucketRequest(), project="project_value", backend_bucket="backend_bucket_value", @@ -837,7 +839,7 @@ def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_signed_url_key_unary_rest_error(): +def test_add_signed_url_key_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -846,11 +848,11 @@ def test_add_signed_url_key_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteBackendBucketRequest, + compute.AddSignedUrlKeyBackendBucketRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_add_signed_url_key_unary_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -858,6 +860,10 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["signed_url_key_resource"] = { + "key_name": "key_name_value", + "key_value": "key_value_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -894,36 +900,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_signed_url_key_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteBackendBucketRequest, +def test_add_signed_url_key_unary_rest_required_fields( + request_type=compute.AddSignedUrlKeyBackendBucketRequest, ): transport_class = transports.BackendBucketsRestTransport @@ -941,7 +925,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_signed_url_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -951,7 +935,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_signed_url_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -980,9 +964,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -991,32 +976,33 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_signed_url_key_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_add_signed_url_key_unary_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.add_signed_url_key._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "backendBucket", "project", + "signedUrlKeyResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1029,9 +1015,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_delete" + transports.BackendBucketsRestInterceptor, "post_add_signed_url_key" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_delete" + transports.BackendBucketsRestInterceptor, "pre_add_signed_url_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1048,7 +1034,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteBackendBucketRequest() + request = compute.AddSignedUrlKeyBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1056,7 +1042,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.add_signed_url_key_unary( request, metadata=[ ("key", "val"), @@ -1068,8 +1054,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteBackendBucketRequest +def test_add_signed_url_key_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddSignedUrlKeyBackendBucketRequest ): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1078,6 +1064,10 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["signed_url_key_resource"] = { + "key_name": "key_name_value", + "key_value": "key_value_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1089,10 +1079,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.add_signed_url_key_unary(request) -def test_delete_unary_rest_flattened(): +def test_add_signed_url_key_unary_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1110,6 +1100,7 @@ def test_delete_unary_rest_flattened(): mock_args = dict( project="project_value", backend_bucket="backend_bucket_value", + signed_url_key_resource=compute.SignedUrlKey(key_name="key_name_value"), ) mock_args.update(sample_request) @@ -1121,20 +1112,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.add_signed_url_key_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/addSignedUrlKey" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1143,14 +1134,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteBackendBucketRequest(), + client.add_signed_url_key_unary( + compute.AddSignedUrlKeyBackendBucketRequest(), project="project_value", backend_bucket="backend_bucket_value", + signed_url_key_resource=compute.SignedUrlKey(key_name="key_name_value"), ) -def test_delete_unary_rest_error(): +def test_add_signed_url_key_unary_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1159,11 +1151,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteSignedUrlKeyBackendBucketRequest, + compute.DeleteBackendBucketRequest, dict, ], ) -def test_delete_signed_url_key_unary_rest(request_type): +def test_delete_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1207,10 +1199,10 @@ def test_delete_signed_url_key_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_signed_url_key_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1235,14 +1227,11 @@ def test_delete_signed_url_key_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_signed_url_key_unary_rest_required_fields( - request_type=compute.DeleteSignedUrlKeyBackendBucketRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteBackendBucketRequest): transport_class = transports.BackendBucketsRestTransport request_init = {} request_init["backend_bucket"] = "" - request_init["key_name"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1252,38 +1241,27 @@ def test_delete_signed_url_key_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "keyName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_signed_url_key._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "keyName" in jsonified_request - assert jsonified_request["keyName"] == request_init["key_name"] jsonified_request["backendBucket"] = "backend_bucket_value" - jsonified_request["keyName"] = "key_name_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_signed_url_key._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "key_name", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "backendBucket" in jsonified_request assert jsonified_request["backendBucket"] == "backend_bucket_value" - assert "keyName" in jsonified_request - assert jsonified_request["keyName"] == "key_name_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1305,7 +1283,7 @@ def test_delete_signed_url_key_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result @@ -1316,35 +1294,24 @@ def test_delete_signed_url_key_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_signed_url_key_unary(request) + response = client.delete(request) - expected_params = [ - ( - "keyName", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_signed_url_key_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_signed_url_key._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "keyName", - "requestId", - ) - ) + set(("requestId",)) & set( ( "backendBucket", - "keyName", "project", ) ) @@ -1352,7 +1319,7 @@ def test_delete_signed_url_key_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1365,9 +1332,9 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_delete_signed_url_key" + transports.BackendBucketsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_delete_signed_url_key" + transports.BackendBucketsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1384,7 +1351,7 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteSignedUrlKeyBackendBucketRequest() + request = compute.DeleteBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1392,7 +1359,7 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_signed_url_key_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1404,8 +1371,8 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_signed_url_key_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteSignedUrlKeyBackendBucketRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteBackendBucketRequest ): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1425,10 +1392,10 @@ def test_delete_signed_url_key_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_signed_url_key_unary(request) + client.delete(request) -def test_delete_signed_url_key_unary_rest_flattened(): +def test_delete_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1446,7 +1413,6 @@ def test_delete_signed_url_key_unary_rest_flattened(): mock_args = dict( project="project_value", backend_bucket="backend_bucket_value", - key_name="key_name_value", ) mock_args.update(sample_request) @@ -1458,20 +1424,20 @@ def test_delete_signed_url_key_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_signed_url_key_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/deleteSignedUrlKey" + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" % client.transport._host, args[1], ) -def test_delete_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1480,15 +1446,14 @@ def test_delete_signed_url_key_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_signed_url_key_unary( - compute.DeleteSignedUrlKeyBackendBucketRequest(), + client.delete( + compute.DeleteBackendBucketRequest(), project="project_value", backend_bucket="backend_bucket_value", - key_name="key_name_value", ) -def test_delete_signed_url_key_unary_rest_error(): +def test_delete_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1497,11 +1462,11 @@ def test_delete_signed_url_key_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetBackendBucketRequest, + compute.DeleteBackendBucketRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1514,42 +1479,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendBucket( - bucket_name="bucket_name_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - custom_response_headers=["custom_response_headers_value"], description="description_value", - edge_security_policy="edge_security_policy_value", - enable_cdn=True, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendBucket.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.BackendBucket) - assert response.bucket_name == "bucket_name_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.custom_response_headers == ["custom_response_headers_value"] - assert response.description == "description_value" - assert response.edge_security_policy == "edge_security_policy_value" - assert response.enable_cdn is True - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetBackendBucketRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteBackendBucketRequest, +): transport_class = transports.BackendBucketsRestTransport request_init = {} @@ -1566,7 +1535,7 @@ def test_get_rest_required_fields(request_type=compute.GetBackendBucketRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1576,7 +1545,9 @@ def test_get_rest_required_fields(request_type=compute.GetBackendBucketRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1592,7 +1563,7 @@ def test_get_rest_required_fields(request_type=compute.GetBackendBucketRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendBucket() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1603,32 +1574,32 @@ def test_get_rest_required_fields(request_type=compute.GetBackendBucketRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendBucket.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "backendBucket", @@ -1639,7 +1610,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1652,9 +1623,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_get" + transports.BackendBucketsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_get" + transports.BackendBucketsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1669,19 +1640,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendBucket.to_json( - compute.BackendBucket() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetBackendBucketRequest() + request = compute.DeleteBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendBucket + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1693,9 +1662,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetBackendBucketRequest -): +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteBackendBucketRequest +): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1714,10 +1683,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1726,7 +1695,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendBucket() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "backend_bucket": "sample2"} @@ -1741,12 +1710,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendBucket.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1759,7 +1728,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1768,14 +1737,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetBackendBucketRequest(), + client.delete_unary( + compute.DeleteBackendBucketRequest(), project="project_value", backend_bucket="backend_bucket_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1784,59 +1753,18 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertBackendBucketRequest, + compute.DeleteSignedUrlKeyBackendBucketRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_signed_url_key_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["backend_bucket_resource"] = { - "bucket_name": "bucket_name_value", - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "creation_timestamp": "creation_timestamp_value", - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_cdn": True, - "id": 205, - "kind": "kind_value", - "name": "name_value", - "self_link": "self_link_value", - } + request_init = {"project": "sample1", "backend_bucket": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1873,10 +1801,10 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_signed_url_key(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1901,12 +1829,14 @@ def test_insert_unary_rest(request_type): assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertBackendBucketRequest, +def test_delete_signed_url_key_rest_required_fields( + request_type=compute.DeleteSignedUrlKeyBackendBucketRequest, ): transport_class = transports.BackendBucketsRestTransport request_init = {} + request_init["backend_bucket"] = "" + request_init["key_name"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1916,24 +1846,38 @@ def test_insert_unary_rest_required_fields( ) # verify fields with default values are dropped + assert "keyName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == request_init["key_name"] + jsonified_request["backendBucket"] = "backend_bucket_value" + jsonified_request["keyName"] = "key_name_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "key_name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "backendBucket" in jsonified_request + assert jsonified_request["backendBucket"] == "backend_bucket_value" + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == "key_name_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1958,7 +1902,6 @@ def test_insert_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1967,24 +1910,35 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_signed_url_key(request) - expected_params = [] + expected_params = [ + ( + "keyName", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_signed_url_key_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete_signed_url_key._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "keyName", + "requestId", + ) + ) & set( ( - "backendBucketResource", + "backendBucket", + "keyName", "project", ) ) @@ -1992,7 +1946,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_signed_url_key_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2005,9 +1959,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_insert" + transports.BackendBucketsRestInterceptor, "post_delete_signed_url_key" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_insert" + transports.BackendBucketsRestInterceptor, "pre_delete_signed_url_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2024,7 +1978,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertBackendBucketRequest() + request = compute.DeleteSignedUrlKeyBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2032,7 +1986,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_signed_url_key( request, metadata=[ ("key", "val"), @@ -2044,8 +1998,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertBackendBucketRequest +def test_delete_signed_url_key_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSignedUrlKeyBackendBucketRequest ): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2053,48 +2007,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["backend_bucket_resource"] = { - "bucket_name": "bucket_name_value", - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "creation_timestamp": "creation_timestamp_value", - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_cdn": True, - "id": 205, - "kind": "kind_value", - "name": "name_value", - "self_link": "self_link_value", - } + request_init = {"project": "sample1", "backend_bucket": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2106,10 +2019,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_signed_url_key(request) -def test_insert_unary_rest_flattened(): +def test_delete_signed_url_key_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2121,14 +2034,13 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "backend_bucket": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - backend_bucket_resource=compute.BackendBucket( - bucket_name="bucket_name_value" - ), + backend_bucket="backend_bucket_value", + key_name="key_name_value", ) mock_args.update(sample_request) @@ -2140,20 +2052,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_signed_url_key(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendBuckets" + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/deleteSignedUrlKey" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_signed_url_key_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2162,16 +2074,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertBackendBucketRequest(), + client.delete_signed_url_key( + compute.DeleteSignedUrlKeyBackendBucketRequest(), project="project_value", - backend_bucket_resource=compute.BackendBucket( - bucket_name="bucket_name_value" - ), + backend_bucket="backend_bucket_value", + key_name="key_name_value", ) -def test_insert_unary_rest_error(): +def test_delete_signed_url_key_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2180,50 +2091,68 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListBackendBucketsRequest, + compute.DeleteSignedUrlKeyBackendBucketRequest, dict, ], ) -def test_list_rest(request_type): +def test_delete_signed_url_key_unary_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "backend_bucket": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendBucketList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendBucketList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.delete_signed_url_key_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListBackendBucketsRequest): +def test_delete_signed_url_key_unary_rest_required_fields( + request_type=compute.DeleteSignedUrlKeyBackendBucketRequest, +): transport_class = transports.BackendBucketsRestTransport request_init = {} + request_init["backend_bucket"] = "" + request_init["key_name"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2233,34 +2162,2543 @@ def test_list_rest_required_fields(request_type=compute.ListBackendBucketsReques ) # verify fields with default values are dropped + assert "keyName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == request_init["key_name"] + jsonified_request["backendBucket"] = "backend_bucket_value" + jsonified_request["keyName"] = "key_name_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", + "key_name", + "request_id", ) ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "project" in jsonified_request - assert jsonified_request["project"] == "project_value" + assert "backendBucket" in jsonified_request + assert jsonified_request["backendBucket"] == "backend_bucket_value" + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == "key_name_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_signed_url_key_unary(request) + + expected_params = [ + ( + "keyName", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_signed_url_key_unary_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_signed_url_key._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "keyName", + "requestId", + ) + ) + & set( + ( + "backendBucket", + "keyName", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_delete_signed_url_key" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_delete_signed_url_key" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteSignedUrlKeyBackendBucketRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_signed_url_key_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_signed_url_key_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSignedUrlKeyBackendBucketRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_signed_url_key_unary(request) + + +def test_delete_signed_url_key_unary_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_bucket": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_bucket="backend_bucket_value", + key_name="key_name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_signed_url_key_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/deleteSignedUrlKey" + % client.transport._host, + args[1], + ) + + +def test_delete_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_signed_url_key_unary( + compute.DeleteSignedUrlKeyBackendBucketRequest(), + project="project_value", + backend_bucket="backend_bucket_value", + key_name="key_name_value", + ) + + +def test_delete_signed_url_key_unary_rest_error(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetBackendBucketRequest, + dict, + ], +) +def test_get_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendBucket( + bucket_name="bucket_name_value", + creation_timestamp="creation_timestamp_value", + custom_response_headers=["custom_response_headers_value"], + description="description_value", + edge_security_policy="edge_security_policy_value", + enable_cdn=True, + id=205, + kind="kind_value", + name="name_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendBucket.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.BackendBucket) + assert response.bucket_name == "bucket_name_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.custom_response_headers == ["custom_response_headers_value"] + assert response.description == "description_value" + assert response.edge_security_policy == "edge_security_policy_value" + assert response.enable_cdn is True + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.self_link == "self_link_value" + + +def test_get_rest_required_fields(request_type=compute.GetBackendBucketRequest): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["backend_bucket"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendBucket"] = "backend_bucket_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendBucket" in jsonified_request + assert jsonified_request["backendBucket"] == "backend_bucket_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.BackendBucket() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendBucket.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "backendBucket", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.BackendBucket.to_json( + compute.BackendBucket() + ) + + request = compute.GetBackendBucketRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.BackendBucket + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetBackendBucketRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendBucket() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_bucket": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_bucket="backend_bucket_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendBucket.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetBackendBucketRequest(), + project="project_value", + backend_bucket="backend_bucket_value", + ) + + +def test_get_rest_error(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertBackendBucketRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertBackendBucketRequest): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendBucketResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertBackendBucketRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertBackendBucketRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertBackendBucketRequest(), + project="project_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + + +def test_insert_rest_error(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertBackendBucketRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertBackendBucketRequest, +): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendBucketResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertBackendBucketRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertBackendBucketRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertBackendBucketRequest(), + project="project_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListBackendBucketsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendBucketList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendBucketList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListBackendBucketsRequest): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.BackendBucketList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendBucketList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.BackendBucketList.to_json( + compute.BackendBucketList() + ) + + request = compute.ListBackendBucketsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.BackendBucketList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListBackendBucketsRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendBucketList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendBucketList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListBackendBucketsRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.BackendBucketList( + items=[ + compute.BackendBucket(), + compute.BackendBucket(), + compute.BackendBucket(), + ], + next_page_token="abc", + ), + compute.BackendBucketList( + items=[], + next_page_token="def", + ), + compute.BackendBucketList( + items=[ + compute.BackendBucket(), + ], + next_page_token="ghi", + ), + compute.BackendBucketList( + items=[ + compute.BackendBucket(), + compute.BackendBucket(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.BackendBucketList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.BackendBucket) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchBackendBucketRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchBackendBucketRequest): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["backend_bucket"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendBucket"] = "backend_bucket_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendBucket" in jsonified_request + assert jsonified_request["backendBucket"] == "backend_bucket_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendBucket", + "backendBucketResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchBackendBucketRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchBackendBucketRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_bucket": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_bucket="backend_bucket_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchBackendBucketRequest(), + project="project_value", + backend_bucket="backend_bucket_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + + +def test_patch_rest_error(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchBackendBucketRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchBackendBucketRequest, +): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["backend_bucket"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendBucket"] = "backend_bucket_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendBucket" in jsonified_request + assert jsonified_request["backendBucket"] == "backend_bucket_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendBucket", + "backendBucketResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.BackendBucketsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendBucketsRestInterceptor(), + ) + client = BackendBucketsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendBucketsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.BackendBucketsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchBackendBucketRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchBackendBucketRequest +): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_bucket": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_bucket="backend_bucket_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchBackendBucketRequest(), + project="project_value", + backend_bucket="backend_bucket_value", + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" + ), + ) + + +def test_patch_unary_rest_error(): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetEdgeSecurityPolicyBackendBucketRequest, + dict, + ], +) +def test_set_edge_security_policy_rest(request_type): + client = BackendBucketsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_edge_security_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_edge_security_policy_rest_required_fields( + request_type=compute.SetEdgeSecurityPolicyBackendBucketRequest, +): + transport_class = transports.BackendBucketsRestTransport + + request_init = {} + request_init["backend_bucket"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendBucket"] = "backend_bucket_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendBucket" in jsonified_request + assert jsonified_request["backendBucket"] == "backend_bucket_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2269,7 +4707,7 @@ def test_list_rest_required_fields(request_type=compute.ListBackendBucketsReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendBucketList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2280,46 +4718,45 @@ def test_list_rest_required_fields(request_type=compute.ListBackendBucketsReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendBucketList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_edge_security_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_edge_security_policy_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_edge_security_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "backendBucket", + "project", + "securityPolicyReferenceResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_edge_security_policy_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2332,9 +4769,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_list" + transports.BackendBucketsRestInterceptor, "post_set_edge_security_policy" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_list" + transports.BackendBucketsRestInterceptor, "pre_set_edge_security_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2349,19 +4786,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendBucketList.to_json( - compute.BackendBucketList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListBackendBucketsRequest() + request = compute.SetEdgeSecurityPolicyBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendBucketList + post.return_value = compute.Operation - client.list( + client.set_edge_security_policy( request, metadata=[ ("key", "val"), @@ -2373,8 +4808,9 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListBackendBucketsRequest +def test_set_edge_security_policy_rest_bad_request( + transport: str = "rest", + request_type=compute.SetEdgeSecurityPolicyBackendBucketRequest, ): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2382,7 +4818,10 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "backend_bucket": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2394,10 +4833,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_edge_security_policy(request) -def test_list_rest_flattened(): +def test_set_edge_security_policy_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2406,39 +4845,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendBucketList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "backend_bucket": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + backend_bucket="backend_bucket_value", + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendBucketList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_edge_security_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendBuckets" + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/setEdgeSecurityPolicy" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_edge_security_policy_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2447,81 +4890,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListBackendBucketsRequest(), + client.set_edge_security_policy( + compute.SetEdgeSecurityPolicyBackendBucketRequest(), project="project_value", + backend_bucket="backend_bucket_value", + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_edge_security_policy_rest_error(): client = BackendBucketsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.BackendBucketList( - items=[ - compute.BackendBucket(), - compute.BackendBucket(), - compute.BackendBucket(), - ], - next_page_token="abc", - ), - compute.BackendBucketList( - items=[], - next_page_token="def", - ), - compute.BackendBucketList( - items=[ - compute.BackendBucket(), - ], - next_page_token="ghi", - ), - compute.BackendBucketList( - items=[ - compute.BackendBucket(), - compute.BackendBucket(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.BackendBucketList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.BackendBucket) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchBackendBucketRequest, + compute.SetEdgeSecurityPolicyBackendBucketRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_set_edge_security_policy_unary_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2529,46 +4921,8 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_bucket": "sample2"} - request_init["backend_bucket_resource"] = { - "bucket_name": "bucket_name_value", - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "creation_timestamp": "creation_timestamp_value", - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_cdn": True, - "id": 205, - "kind": "kind_value", - "name": "name_value", - "self_link": "self_link_value", + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" } request = request_type(request_init) @@ -2606,36 +4960,14 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_edge_security_policy_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchBackendBucketRequest, +def test_set_edge_security_policy_unary_rest_required_fields( + request_type=compute.SetEdgeSecurityPolicyBackendBucketRequest, ): transport_class = transports.BackendBucketsRestTransport @@ -2653,7 +4985,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2663,7 +4995,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2692,7 +5024,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2704,33 +5036,33 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_edge_security_policy_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_edge_security_policy_unary_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_edge_security_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "backendBucket", - "backendBucketResource", "project", + "securityPolicyReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2743,9 +5075,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_patch" + transports.BackendBucketsRestInterceptor, "post_set_edge_security_policy" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_patch" + transports.BackendBucketsRestInterceptor, "pre_set_edge_security_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2762,7 +5094,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchBackendBucketRequest() + request = compute.SetEdgeSecurityPolicyBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2770,7 +5102,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.set_edge_security_policy_unary( request, metadata=[ ("key", "val"), @@ -2782,8 +5114,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchBackendBucketRequest +def test_set_edge_security_policy_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetEdgeSecurityPolicyBackendBucketRequest, ): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2792,46 +5125,8 @@ def test_patch_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_bucket": "sample2"} - request_init["backend_bucket_resource"] = { - "bucket_name": "bucket_name_value", - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "creation_timestamp": "creation_timestamp_value", - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_cdn": True, - "id": 205, - "kind": "kind_value", - "name": "name_value", - "self_link": "self_link_value", + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" } request = request_type(request_init) @@ -2844,10 +5139,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_edge_security_policy_unary(request) -def test_patch_unary_rest_flattened(): +def test_set_edge_security_policy_unary_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2865,8 +5160,8 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", backend_bucket="backend_bucket_value", - backend_bucket_resource=compute.BackendBucket( - bucket_name="bucket_name_value" + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" ), ) mock_args.update(sample_request) @@ -2879,20 +5174,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_edge_security_policy_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/setEdgeSecurityPolicy" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2901,17 +5196,17 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchBackendBucketRequest(), + client.set_edge_security_policy_unary( + compute.SetEdgeSecurityPolicyBackendBucketRequest(), project="project_value", backend_bucket="backend_bucket_value", - backend_bucket_resource=compute.BackendBucket( - bucket_name="bucket_name_value" + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" ), ) -def test_patch_unary_rest_error(): +def test_set_edge_security_policy_unary_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2920,11 +5215,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetEdgeSecurityPolicyBackendBucketRequest, + compute.UpdateBackendBucketRequest, dict, ], ) -def test_set_edge_security_policy_unary_rest(request_type): +def test_update_rest(request_type): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2932,8 +5227,46 @@ def test_set_edge_security_policy_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_bucket": "sample2"} - request_init["security_policy_reference_resource"] = { - "security_policy": "security_policy_value" + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", } request = request_type(request_init) @@ -2971,10 +5304,10 @@ def test_set_edge_security_policy_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_edge_security_policy_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2999,9 +5332,7 @@ def test_set_edge_security_policy_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_edge_security_policy_unary_rest_required_fields( - request_type=compute.SetEdgeSecurityPolicyBackendBucketRequest, -): +def test_update_rest_required_fields(request_type=compute.UpdateBackendBucketRequest): transport_class = transports.BackendBucketsRestTransport request_init = {} @@ -3018,7 +5349,7 @@ def test_set_edge_security_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3028,7 +5359,7 @@ def test_set_edge_security_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3057,7 +5388,7 @@ def test_set_edge_security_policy_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -3069,33 +5400,33 @@ def test_set_edge_security_policy_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_edge_security_policy_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_edge_security_policy_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_edge_security_policy._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "backendBucket", + "backendBucketResource", "project", - "securityPolicyReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.BackendBucketsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3108,9 +5439,9 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendBucketsRestInterceptor, "post_set_edge_security_policy" + transports.BackendBucketsRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.BackendBucketsRestInterceptor, "pre_set_edge_security_policy" + transports.BackendBucketsRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3127,7 +5458,7 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetEdgeSecurityPolicyBackendBucketRequest() + request = compute.UpdateBackendBucketRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3135,7 +5466,7 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_edge_security_policy_unary( + client.update( request, metadata=[ ("key", "val"), @@ -3147,9 +5478,8 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_edge_security_policy_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetEdgeSecurityPolicyBackendBucketRequest, +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateBackendBucketRequest ): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3158,8 +5488,46 @@ def test_set_edge_security_policy_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_bucket": "sample2"} - request_init["security_policy_reference_resource"] = { - "security_policy": "security_policy_value" + request_init["backend_bucket_resource"] = { + "bucket_name": "bucket_name_value", + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "creation_timestamp": "creation_timestamp_value", + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_cdn": True, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", } request = request_type(request_init) @@ -3172,10 +5540,10 @@ def test_set_edge_security_policy_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_edge_security_policy_unary(request) + client.update(request) -def test_set_edge_security_policy_unary_rest_flattened(): +def test_update_rest_flattened(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3193,8 +5561,8 @@ def test_set_edge_security_policy_unary_rest_flattened(): mock_args = dict( project="project_value", backend_bucket="backend_bucket_value", - security_policy_reference_resource=compute.SecurityPolicyReference( - security_policy="security_policy_value" + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" ), ) mock_args.update(sample_request) @@ -3207,20 +5575,20 @@ def test_set_edge_security_policy_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_edge_security_policy_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}/setEdgeSecurityPolicy" + "%s/compute/v1/projects/{project}/global/backendBuckets/{backend_bucket}" % client.transport._host, args[1], ) -def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3229,17 +5597,17 @@ def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_edge_security_policy_unary( - compute.SetEdgeSecurityPolicyBackendBucketRequest(), + client.update( + compute.UpdateBackendBucketRequest(), project="project_value", backend_bucket="backend_bucket_value", - security_policy_reference_resource=compute.SecurityPolicyReference( - security_policy="security_policy_value" + backend_bucket_resource=compute.BackendBucket( + bucket_name="bucket_name_value" ), ) -def test_set_edge_security_policy_unary_rest_error(): +def test_update_rest_error(): client = BackendBucketsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3341,28 +5709,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -3723,6 +6069,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = BackendBucketsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_backend_buckets_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3762,6 +6121,14 @@ def test_backend_buckets_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_backend_buckets_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_backend_services.py b/tests/unit/gapic/compute_v1/test_backend_services.py index ce912851f..3ba727add 100644 --- a/tests/unit/gapic/compute_v1/test_backend_services.py +++ b/tests/unit/gapic/compute_v1/test_backend_services.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -539,7 +541,7 @@ def test_backend_services_client_client_options_credentials_file( dict, ], ) -def test_add_signed_url_key_unary_rest(request_type): +def test_add_signed_url_key_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -587,10 +589,10 @@ def test_add_signed_url_key_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_signed_url_key_unary(request) + response = client.add_signed_url_key(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -615,7 +617,7 @@ def test_add_signed_url_key_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_signed_url_key_unary_rest_required_fields( +def test_add_signed_url_key_rest_required_fields( request_type=compute.AddSignedUrlKeyBackendServiceRequest, ): transport_class = transports.BackendServicesRestTransport @@ -685,14 +687,14 @@ def test_add_signed_url_key_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_signed_url_key_unary(request) + response = client.add_signed_url_key(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_signed_url_key_unary_rest_unset_required_fields(): +def test_add_signed_url_key_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -711,7 +713,7 @@ def test_add_signed_url_key_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): +def test_add_signed_url_key_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -751,7 +753,7 @@ def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_signed_url_key_unary( + client.add_signed_url_key( request, metadata=[ ("key", "val"), @@ -763,7 +765,7 @@ def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_signed_url_key_unary_rest_bad_request( +def test_add_signed_url_key_rest_bad_request( transport: str = "rest", request_type=compute.AddSignedUrlKeyBackendServiceRequest ): client = BackendServicesClient( @@ -788,10 +790,10 @@ def test_add_signed_url_key_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_signed_url_key_unary(request) + client.add_signed_url_key(request) -def test_add_signed_url_key_unary_rest_flattened(): +def test_add_signed_url_key_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -821,7 +823,7 @@ def test_add_signed_url_key_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_signed_url_key_unary(**mock_args) + client.add_signed_url_key(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -834,7 +836,7 @@ def test_add_signed_url_key_unary_rest_flattened(): ) -def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): +def test_add_signed_url_key_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -843,7 +845,7 @@ def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_signed_url_key_unary( + client.add_signed_url_key( compute.AddSignedUrlKeyBackendServiceRequest(), project="project_value", backend_service="backend_service_value", @@ -851,7 +853,7 @@ def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_signed_url_key_unary_rest_error(): +def test_add_signed_url_key_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -860,54 +862,71 @@ def test_add_signed_url_key_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListBackendServicesRequest, + compute.AddSignedUrlKeyBackendServiceRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_signed_url_key_unary_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["signed_url_key_resource"] = { + "key_name": "key_name_value", + "key_value": "key_value_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_signed_url_key_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert isinstance(response, compute.Operation) -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListBackendServicesRequest, +def test_add_signed_url_key_unary_rest_required_fields( + request_type=compute.AddSignedUrlKeyBackendServiceRequest, ): transport_class = transports.BackendServicesRestTransport request_init = {} + request_init["backend_service"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -920,30 +939,24 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_signed_url_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["backendService"] = "backend_service_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_signed_url_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -954,7 +967,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -965,49 +978,45 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_signed_url_key_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_signed_url_key_unary_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_signed_url_key._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "backendService", + "project", + "signedUrlKeyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1020,9 +1029,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_aggregated_list" + transports.BackendServicesRestInterceptor, "post_add_signed_url_key" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_aggregated_list" + transports.BackendServicesRestInterceptor, "pre_add_signed_url_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1037,19 +1046,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendServiceAggregatedList.to_json( - compute.BackendServiceAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListBackendServicesRequest() + request = compute.AddSignedUrlKeyBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_signed_url_key_unary( request, metadata=[ ("key", "val"), @@ -1061,8 +1068,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListBackendServicesRequest +def test_add_signed_url_key_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddSignedUrlKeyBackendServiceRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1070,7 +1077,11 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["signed_url_key_resource"] = { + "key_name": "key_name_value", + "key_value": "key_value_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1082,10 +1093,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_signed_url_key_unary(request) -def test_aggregated_list_rest_flattened(): +def test_add_signed_url_key_unary_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1094,39 +1105,41 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "backend_service": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + backend_service="backend_service_value", + signed_url_key_resource=compute.SignedUrlKey(key_name="key_name_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_signed_url_key_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/backendServices" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/addSignedUrlKey" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1135,173 +1148,71 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListBackendServicesRequest(), + client.add_signed_url_key_unary( + compute.AddSignedUrlKeyBackendServiceRequest(), project="project_value", + backend_service="backend_service_value", + signed_url_key_resource=compute.SignedUrlKey(key_name="key_name_value"), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_signed_url_key_unary_rest_error(): client = BackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.BackendServiceAggregatedList( - items={ - "a": compute.BackendServicesScopedList(), - "b": compute.BackendServicesScopedList(), - "c": compute.BackendServicesScopedList(), - }, - next_page_token="abc", - ), - compute.BackendServiceAggregatedList( - items={}, - next_page_token="def", - ), - compute.BackendServiceAggregatedList( - items={ - "g": compute.BackendServicesScopedList(), - }, - next_page_token="ghi", - ), - compute.BackendServiceAggregatedList( - items={ - "h": compute.BackendServicesScopedList(), - "i": compute.BackendServicesScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.BackendServiceAggregatedList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.BackendServicesScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == ( - str, - compute.BackendServicesScopedList, - ) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.BackendServicesScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.DeleteBackendServiceRequest, + compute.AggregatedListBackendServicesRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_aggregated_list_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "backend_service": "sample2"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.BackendServiceAggregatedList( + id="id_value", kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.BackendServiceAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteBackendServiceRequest, +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListBackendServicesRequest, ): transport_class = transports.BackendServicesRestTransport request_init = {} - request_init["backend_service"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1314,24 +1225,30 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["backendService"] = "backend_service_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "backendService" in jsonified_request - assert jsonified_request["backendService"] == "backend_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1342,7 +1259,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.BackendServiceAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1353,43 +1270,49 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.BackendServiceAggregatedList.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "backendService", - "project", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1402,9 +1325,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_delete" + transports.BackendServicesRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_delete" + transports.BackendServicesRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1419,17 +1342,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.BackendServiceAggregatedList.to_json( + compute.BackendServiceAggregatedList() + ) - request = compute.DeleteBackendServiceRequest() + request = compute.AggregatedListBackendServicesRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.BackendServiceAggregatedList - client.delete_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -1441,8 +1366,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteBackendServiceRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListBackendServicesRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1450,7 +1375,7 @@ def test_delete_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "backend_service": "sample2"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1462,10 +1387,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.aggregated_list(request) -def test_delete_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1474,40 +1399,39 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.BackendServiceAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "backend_service": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - backend_service="backend_service_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.BackendServiceAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" + "%s/compute/v1/projects/{project}/aggregated/backendServices" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1516,27 +1440,95 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteBackendServiceRequest(), + client.aggregated_list( + compute.AggregatedListBackendServicesRequest(), project="project_value", - backend_service="backend_service_value", ) -def test_delete_unary_rest_error(): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = BackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.BackendServiceAggregatedList( + items={ + "a": compute.BackendServicesScopedList(), + "b": compute.BackendServicesScopedList(), + "c": compute.BackendServicesScopedList(), + }, + next_page_token="abc", + ), + compute.BackendServiceAggregatedList( + items={}, + next_page_token="def", + ), + compute.BackendServiceAggregatedList( + items={ + "g": compute.BackendServicesScopedList(), + }, + next_page_token="ghi", + ), + compute.BackendServiceAggregatedList( + items={ + "h": compute.BackendServicesScopedList(), + "i": compute.BackendServicesScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.BackendServiceAggregatedList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.BackendServicesScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == ( + str, + compute.BackendServicesScopedList, + ) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.BackendServicesScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.DeleteSignedUrlKeyBackendServiceRequest, + compute.DeleteBackendServiceRequest, dict, ], ) -def test_delete_signed_url_key_unary_rest(request_type): +def test_delete_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1580,10 +1572,10 @@ def test_delete_signed_url_key_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_signed_url_key_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1608,14 +1600,11 @@ def test_delete_signed_url_key_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_signed_url_key_unary_rest_required_fields( - request_type=compute.DeleteSignedUrlKeyBackendServiceRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteBackendServiceRequest): transport_class = transports.BackendServicesRestTransport request_init = {} request_init["backend_service"] = "" - request_init["key_name"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1625,38 +1614,27 @@ def test_delete_signed_url_key_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "keyName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_signed_url_key._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "keyName" in jsonified_request - assert jsonified_request["keyName"] == request_init["key_name"] jsonified_request["backendService"] = "backend_service_value" - jsonified_request["keyName"] = "key_name_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_signed_url_key._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "key_name", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "backendService" in jsonified_request assert jsonified_request["backendService"] == "backend_service_value" - assert "keyName" in jsonified_request - assert jsonified_request["keyName"] == "key_name_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1678,7 +1656,7 @@ def test_delete_signed_url_key_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result @@ -1689,35 +1667,24 @@ def test_delete_signed_url_key_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_signed_url_key_unary(request) + response = client.delete(request) - expected_params = [ - ( - "keyName", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_signed_url_key_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_signed_url_key._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "keyName", - "requestId", - ) - ) + set(("requestId",)) & set( ( "backendService", - "keyName", "project", ) ) @@ -1725,7 +1692,7 @@ def test_delete_signed_url_key_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1738,9 +1705,9 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_delete_signed_url_key" + transports.BackendServicesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_delete_signed_url_key" + transports.BackendServicesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1757,7 +1724,7 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteSignedUrlKeyBackendServiceRequest() + request = compute.DeleteBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1765,7 +1732,7 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_signed_url_key_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1777,9 +1744,8 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_signed_url_key_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.DeleteSignedUrlKeyBackendServiceRequest, +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteBackendServiceRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1799,10 +1765,10 @@ def test_delete_signed_url_key_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_signed_url_key_unary(request) + client.delete(request) -def test_delete_signed_url_key_unary_rest_flattened(): +def test_delete_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1820,7 +1786,6 @@ def test_delete_signed_url_key_unary_rest_flattened(): mock_args = dict( project="project_value", backend_service="backend_service_value", - key_name="key_name_value", ) mock_args.update(sample_request) @@ -1832,20 +1797,20 @@ def test_delete_signed_url_key_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_signed_url_key_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/deleteSignedUrlKey" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" % client.transport._host, args[1], ) -def test_delete_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1854,15 +1819,14 @@ def test_delete_signed_url_key_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_signed_url_key_unary( - compute.DeleteSignedUrlKeyBackendServiceRequest(), + client.delete( + compute.DeleteBackendServiceRequest(), project="project_value", backend_service="backend_service_value", - key_name="key_name_value", ) -def test_delete_signed_url_key_unary_rest_error(): +def test_delete_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1871,11 +1835,11 @@ def test_delete_signed_url_key_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetBackendServiceRequest, + compute.DeleteBackendServiceRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1888,68 +1852,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendService( - affinity_cookie_ttl_sec=2432, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - custom_request_headers=["custom_request_headers_value"], - custom_response_headers=["custom_response_headers_value"], description="description_value", - edge_security_policy="edge_security_policy_value", - enable_c_d_n=True, - fingerprint="fingerprint_value", - health_checks=["health_checks_value"], + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - load_balancing_scheme="load_balancing_scheme_value", - locality_lb_policy="locality_lb_policy_value", name="name_value", - network="network_value", - port=453, - port_name="port_name_value", - protocol="protocol_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - security_policy="security_policy_value", self_link="self_link_value", - session_affinity="session_affinity_value", - timeout_sec=1185, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.BackendService) - assert response.affinity_cookie_ttl_sec == 2432 - assert response.creation_timestamp == "creation_timestamp_value" - assert response.custom_request_headers == ["custom_request_headers_value"] - assert response.custom_response_headers == ["custom_response_headers_value"] - assert response.description == "description_value" - assert response.edge_security_policy == "edge_security_policy_value" - assert response.enable_c_d_n is True - assert response.fingerprint == "fingerprint_value" - assert response.health_checks == ["health_checks_value"] - assert response.id == 205 - assert response.kind == "kind_value" - assert response.load_balancing_scheme == "load_balancing_scheme_value" - assert response.locality_lb_policy == "locality_lb_policy_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.port == 453 - assert response.port_name == "port_name_value" - assert response.protocol == "protocol_value" - assert response.region == "region_value" - assert response.security_policy == "security_policy_value" - assert response.self_link == "self_link_value" - assert response.session_affinity == "session_affinity_value" - assert response.timeout_sec == 1185 + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetBackendServiceRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteBackendServiceRequest, +): transport_class = transports.BackendServicesRestTransport request_init = {} @@ -1966,7 +1908,7 @@ def test_get_rest_required_fields(request_type=compute.GetBackendServiceRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1976,7 +1918,9 @@ def test_get_rest_required_fields(request_type=compute.GetBackendServiceRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1992,7 +1936,7 @@ def test_get_rest_required_fields(request_type=compute.GetBackendServiceRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendService() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2003,32 +1947,32 @@ def test_get_rest_required_fields(request_type=compute.GetBackendServiceRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "backendService", @@ -2039,7 +1983,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2052,9 +1996,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_get" + transports.BackendServicesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_get" + transports.BackendServicesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2069,19 +2013,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendService.to_json( - compute.BackendService() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetBackendServiceRequest() + request = compute.DeleteBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendService + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2093,8 +2035,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetBackendServiceRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteBackendServiceRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2114,10 +2056,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2126,7 +2068,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendService() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "backend_service": "sample2"} @@ -2141,12 +2083,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2159,7 +2101,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2168,14 +2110,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetBackendServiceRequest(), + client.delete_unary( + compute.DeleteBackendServiceRequest(), project="project_value", backend_service="backend_service_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2184,11 +2126,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetHealthBackendServiceRequest, + compute.DeleteSignedUrlKeyBackendServiceRequest, dict, ], ) -def test_get_health_rest(request_type): +def test_delete_signed_url_key_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2196,36 +2138,78 @@ def test_get_health_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_service": "sample2"} - request_init["resource_group_reference_resource"] = {"group": "group_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceGroupHealth( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_health(request) + response = client.delete_signed_url_key(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.BackendServiceGroupHealth) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_health_rest_required_fields( - request_type=compute.GetHealthBackendServiceRequest, +def test_delete_signed_url_key_rest_required_fields( + request_type=compute.DeleteSignedUrlKeyBackendServiceRequest, ): transport_class = transports.BackendServicesRestTransport request_init = {} request_init["backend_service"] = "" + request_init["key_name"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2235,25 +2219,38 @@ def test_get_health_rest_required_fields( ) # verify fields with default values are dropped + assert "keyName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_health._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == request_init["key_name"] jsonified_request["backendService"] = "backend_service_value" + jsonified_request["keyName"] = "key_name_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_health._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "key_name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "backendService" in jsonified_request assert jsonified_request["backendService"] == "backend_service_value" + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == "key_name_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -2264,7 +2261,7 @@ def test_get_health_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceGroupHealth() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2278,42 +2275,51 @@ def test_get_health_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_health(request) + response = client.delete_signed_url_key(request) - expected_params = [] + expected_params = [ + ( + "keyName", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_health_rest_unset_required_fields(): +def test_delete_signed_url_key_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_health._get_unset_required_fields({}) + unset_fields = transport.delete_signed_url_key._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "keyName", + "requestId", + ) + ) & set( ( "backendService", + "keyName", "project", - "resourceGroupReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_health_rest_interceptors(null_interceptor): +def test_delete_signed_url_key_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2326,9 +2332,9 @@ def test_get_health_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_get_health" + transports.BackendServicesRestInterceptor, "post_delete_signed_url_key" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_get_health" + transports.BackendServicesRestInterceptor, "pre_delete_signed_url_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2343,19 +2349,17 @@ def test_get_health_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendServiceGroupHealth.to_json( - compute.BackendServiceGroupHealth() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetHealthBackendServiceRequest() + request = compute.DeleteSignedUrlKeyBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceGroupHealth + post.return_value = compute.Operation - client.get_health( + client.delete_signed_url_key( request, metadata=[ ("key", "val"), @@ -2367,8 +2371,9 @@ def test_get_health_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_health_rest_bad_request( - transport: str = "rest", request_type=compute.GetHealthBackendServiceRequest +def test_delete_signed_url_key_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteSignedUrlKeyBackendServiceRequest, ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2377,7 +2382,6 @@ def test_get_health_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_service": "sample2"} - request_init["resource_group_reference_resource"] = {"group": "group_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2389,10 +2393,10 @@ def test_get_health_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_health(request) + client.delete_signed_url_key(request) -def test_get_health_rest_flattened(): +def test_delete_signed_url_key_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2401,7 +2405,7 @@ def test_get_health_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceGroupHealth() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "backend_service": "sample2"} @@ -2410,34 +2414,32 @@ def test_get_health_rest_flattened(): mock_args = dict( project="project_value", backend_service="backend_service_value", - resource_group_reference_resource=compute.ResourceGroupReference( - group="group_value" - ), + key_name="key_name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_health(**mock_args) + client.delete_signed_url_key(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/getHealth" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/deleteSignedUrlKey" % client.transport._host, args[1], ) -def test_get_health_rest_flattened_error(transport: str = "rest"): +def test_delete_signed_url_key_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2446,17 +2448,15 @@ def test_get_health_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_health( - compute.GetHealthBackendServiceRequest(), + client.delete_signed_url_key( + compute.DeleteSignedUrlKeyBackendServiceRequest(), project="project_value", backend_service="backend_service_value", - resource_group_reference_resource=compute.ResourceGroupReference( - group="group_value" - ), + key_name="key_name_value", ) -def test_get_health_rest_error(): +def test_delete_signed_url_key_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2465,165 +2465,18 @@ def test_get_health_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertBackendServiceRequest, + compute.DeleteSignedUrlKeyBackendServiceRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_signed_url_key_unary_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["backend_service_resource"] = { - "affinity_cookie_ttl_sec": 2432, - "backends": [ - { - "balancing_mode": "balancing_mode_value", - "capacity_scaler": 0.1575, - "description": "description_value", - "failover": True, - "group": "group_value", - "max_connections": 1608, - "max_connections_per_endpoint": 2990, - "max_connections_per_instance": 2978, - "max_rate": 849, - "max_rate_per_endpoint": 0.22310000000000002, - "max_rate_per_instance": 0.22190000000000001, - "max_utilization": 0.1633, - } - ], - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_host": True, - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "include_named_cookies": [ - "include_named_cookies_value_1", - "include_named_cookies_value_2", - ], - "include_protocol": True, - "include_query_string": True, - "query_string_blacklist": [ - "query_string_blacklist_value_1", - "query_string_blacklist_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "circuit_breakers": { - "max_connections": 1608, - "max_pending_requests": 2149, - "max_requests": 1313, - "max_requests_per_connection": 2902, - "max_retries": 1187, - }, - "connection_draining": {"draining_timeout_sec": 2124}, - "connection_tracking_policy": { - "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", - "enable_strong_affinity": True, - "idle_timeout_sec": 1694, - "tracking_mode": "tracking_mode_value", - }, - "consistent_hash": { - "http_cookie": { - "name": "name_value", - "path": "path_value", - "ttl": {"nanos": 543, "seconds": 751}, - }, - "http_header_name": "http_header_name_value", - "minimum_ring_size": 1829, - }, - "creation_timestamp": "creation_timestamp_value", - "custom_request_headers": [ - "custom_request_headers_value_1", - "custom_request_headers_value_2", - ], - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_c_d_n": True, - "failover_policy": { - "disable_connection_drain_on_failover": True, - "drop_traffic_if_unhealthy": True, - "failover_ratio": 0.1494, - }, - "fingerprint": "fingerprint_value", - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "iap": { - "enabled": True, - "oauth2_client_id": "oauth2_client_id_value", - "oauth2_client_secret": "oauth2_client_secret_value", - "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", - }, - "id": 205, - "kind": "kind_value", - "load_balancing_scheme": "load_balancing_scheme_value", - "locality_lb_policies": [ - { - "custom_policy": {"data": "data_value", "name": "name_value"}, - "policy": {"name": "name_value"}, - } - ], - "locality_lb_policy": "locality_lb_policy_value", - "log_config": {"enable": True, "sample_rate": 0.1165}, - "max_stream_duration": {}, - "name": "name_value", - "network": "network_value", - "outlier_detection": { - "base_ejection_time": {}, - "consecutive_errors": 1956, - "consecutive_gateway_failure": 2880, - "enforcing_consecutive_errors": 3006, - "enforcing_consecutive_gateway_failure": 3930, - "enforcing_success_rate": 2334, - "interval": {}, - "max_ejection_percent": 2118, - "success_rate_minimum_hosts": 2799, - "success_rate_request_volume": 2915, - "success_rate_stdev_factor": 2663, - }, - "port": 453, - "port_name": "port_name_value", - "protocol": "protocol_value", - "region": "region_value", - "security_policy": "security_policy_value", - "security_settings": { - "client_tls_policy": "client_tls_policy_value", - "subject_alt_names": [ - "subject_alt_names_value_1", - "subject_alt_names_value_2", - ], - }, - "self_link": "self_link_value", - "session_affinity": "session_affinity_value", - "subsetting": {"policy": "policy_value"}, - "timeout_sec": 1185, - } + request_init = {"project": "sample1", "backend_service": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2660,40 +2513,20 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_signed_url_key_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertBackendServiceRequest, +def test_delete_signed_url_key_unary_rest_required_fields( + request_type=compute.DeleteSignedUrlKeyBackendServiceRequest, ): transport_class = transports.BackendServicesRestTransport request_init = {} + request_init["backend_service"] = "" + request_init["key_name"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2703,24 +2536,38 @@ def test_insert_unary_rest_required_fields( ) # verify fields with default values are dropped + assert "keyName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == request_init["key_name"] + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["keyName"] = "key_name_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete_signed_url_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "key_name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "keyName" in jsonified_request + assert jsonified_request["keyName"] == "key_name_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -2745,7 +2592,6 @@ def test_insert_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2754,32 +2600,43 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_signed_url_key_unary(request) - expected_params = [] + expected_params = [ + ( + "keyName", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_signed_url_key_unary_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete_signed_url_key._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "backendServiceResource", - "project", + "keyName", + "requestId", ) ) - ) + & set( + ( + "backendService", + "keyName", + "project", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2792,9 +2649,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_insert" + transports.BackendServicesRestInterceptor, "post_delete_signed_url_key" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_insert" + transports.BackendServicesRestInterceptor, "pre_delete_signed_url_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2811,7 +2668,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertBackendServiceRequest() + request = compute.DeleteSignedUrlKeyBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2819,7 +2676,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_signed_url_key_unary( request, metadata=[ ("key", "val"), @@ -2831,8 +2688,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertBackendServiceRequest +def test_delete_signed_url_key_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteSignedUrlKeyBackendServiceRequest, ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2840,154 +2698,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["backend_service_resource"] = { - "affinity_cookie_ttl_sec": 2432, - "backends": [ - { - "balancing_mode": "balancing_mode_value", - "capacity_scaler": 0.1575, - "description": "description_value", - "failover": True, - "group": "group_value", - "max_connections": 1608, - "max_connections_per_endpoint": 2990, - "max_connections_per_instance": 2978, - "max_rate": 849, - "max_rate_per_endpoint": 0.22310000000000002, - "max_rate_per_instance": 0.22190000000000001, - "max_utilization": 0.1633, - } - ], - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_host": True, - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "include_named_cookies": [ - "include_named_cookies_value_1", - "include_named_cookies_value_2", - ], - "include_protocol": True, - "include_query_string": True, - "query_string_blacklist": [ - "query_string_blacklist_value_1", - "query_string_blacklist_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "circuit_breakers": { - "max_connections": 1608, - "max_pending_requests": 2149, - "max_requests": 1313, - "max_requests_per_connection": 2902, - "max_retries": 1187, - }, - "connection_draining": {"draining_timeout_sec": 2124}, - "connection_tracking_policy": { - "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", - "enable_strong_affinity": True, - "idle_timeout_sec": 1694, - "tracking_mode": "tracking_mode_value", - }, - "consistent_hash": { - "http_cookie": { - "name": "name_value", - "path": "path_value", - "ttl": {"nanos": 543, "seconds": 751}, - }, - "http_header_name": "http_header_name_value", - "minimum_ring_size": 1829, - }, - "creation_timestamp": "creation_timestamp_value", - "custom_request_headers": [ - "custom_request_headers_value_1", - "custom_request_headers_value_2", - ], - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_c_d_n": True, - "failover_policy": { - "disable_connection_drain_on_failover": True, - "drop_traffic_if_unhealthy": True, - "failover_ratio": 0.1494, - }, - "fingerprint": "fingerprint_value", - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "iap": { - "enabled": True, - "oauth2_client_id": "oauth2_client_id_value", - "oauth2_client_secret": "oauth2_client_secret_value", - "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", - }, - "id": 205, - "kind": "kind_value", - "load_balancing_scheme": "load_balancing_scheme_value", - "locality_lb_policies": [ - { - "custom_policy": {"data": "data_value", "name": "name_value"}, - "policy": {"name": "name_value"}, - } - ], - "locality_lb_policy": "locality_lb_policy_value", - "log_config": {"enable": True, "sample_rate": 0.1165}, - "max_stream_duration": {}, - "name": "name_value", - "network": "network_value", - "outlier_detection": { - "base_ejection_time": {}, - "consecutive_errors": 1956, - "consecutive_gateway_failure": 2880, - "enforcing_consecutive_errors": 3006, - "enforcing_consecutive_gateway_failure": 3930, - "enforcing_success_rate": 2334, - "interval": {}, - "max_ejection_percent": 2118, - "success_rate_minimum_hosts": 2799, - "success_rate_request_volume": 2915, - "success_rate_stdev_factor": 2663, - }, - "port": 453, - "port_name": "port_name_value", - "protocol": "protocol_value", - "region": "region_value", - "security_policy": "security_policy_value", - "security_settings": { - "client_tls_policy": "client_tls_policy_value", - "subject_alt_names": [ - "subject_alt_names_value_1", - "subject_alt_names_value_2", - ], - }, - "self_link": "self_link_value", - "session_affinity": "session_affinity_value", - "subsetting": {"policy": "policy_value"}, - "timeout_sec": 1185, - } + request_init = {"project": "sample1", "backend_service": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2999,10 +2710,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_signed_url_key_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_signed_url_key_unary_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3014,14 +2725,13 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "backend_service": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - backend_service_resource=compute.BackendService( - affinity_cookie_ttl_sec=2432 - ), + backend_service="backend_service_value", + key_name="key_name_value", ) mock_args.update(sample_request) @@ -3033,20 +2743,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_signed_url_key_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/deleteSignedUrlKey" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_signed_url_key_unary_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3055,16 +2765,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertBackendServiceRequest(), + client.delete_signed_url_key_unary( + compute.DeleteSignedUrlKeyBackendServiceRequest(), project="project_value", - backend_service_resource=compute.BackendService( - affinity_cookie_ttl_sec=2432 - ), + backend_service="backend_service_value", + key_name="key_name_value", ) -def test_insert_unary_rest_error(): +def test_delete_signed_url_key_unary_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3073,50 +2782,89 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListBackendServicesRequest, + compute.GetBackendServiceRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "backend_service": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceList( - id="id_value", + return_value = compute.BackendService( + affinity_cookie_ttl_sec=2432, + creation_timestamp="creation_timestamp_value", + custom_request_headers=["custom_request_headers_value"], + custom_response_headers=["custom_response_headers_value"], + description="description_value", + edge_security_policy="edge_security_policy_value", + enable_c_d_n=True, + fingerprint="fingerprint_value", + health_checks=["health_checks_value"], + id=205, kind="kind_value", - next_page_token="next_page_token_value", + load_balancing_scheme="load_balancing_scheme_value", + locality_lb_policy="locality_lb_policy_value", + name="name_value", + network="network_value", + port=453, + port_name="port_name_value", + protocol="protocol_value", + region="region_value", + security_policy="security_policy_value", self_link="self_link_value", + session_affinity="session_affinity_value", + timeout_sec=1185, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceList.to_json(return_value) + json_return_value = compute.BackendService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.BackendService) + assert response.affinity_cookie_ttl_sec == 2432 + assert response.creation_timestamp == "creation_timestamp_value" + assert response.custom_request_headers == ["custom_request_headers_value"] + assert response.custom_response_headers == ["custom_response_headers_value"] + assert response.description == "description_value" + assert response.edge_security_policy == "edge_security_policy_value" + assert response.enable_c_d_n is True + assert response.fingerprint == "fingerprint_value" + assert response.health_checks == ["health_checks_value"] + assert response.id == 205 assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - - -def test_list_rest_required_fields(request_type=compute.ListBackendServicesRequest): - transport_class = transports.BackendServicesRestTransport - - request_init = {} + assert response.load_balancing_scheme == "load_balancing_scheme_value" + assert response.locality_lb_policy == "locality_lb_policy_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.port == 453 + assert response.port_name == "port_name_value" + assert response.protocol == "protocol_value" + assert response.region == "region_value" + assert response.security_policy == "security_policy_value" + assert response.self_link == "self_link_value" + assert response.session_affinity == "session_affinity_value" + assert response.timeout_sec == 1185 + + +def test_get_rest_required_fields(request_type=compute.GetBackendServiceRequest): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["backend_service"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -3129,29 +2877,22 @@ def test_list_rest_required_fields(request_type=compute.ListBackendServicesReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["backendService"] = "backend_service_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -3162,7 +2903,7 @@ def test_list_rest_required_fields(request_type=compute.ListBackendServicesReque request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceList() + return_value = compute.BackendService() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3180,39 +2921,36 @@ def test_list_rest_required_fields(request_type=compute.ListBackendServicesReque response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceList.to_json(return_value) + json_return_value = compute.BackendService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(()) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "backendService", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3225,9 +2963,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_list" + transports.BackendServicesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_list" + transports.BackendServicesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3242,19 +2980,19 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendServiceList.to_json( - compute.BackendServiceList() + req.return_value._content = compute.BackendService.to_json( + compute.BackendService() ) - request = compute.ListBackendServicesRequest() + request = compute.GetBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceList + post.return_value = compute.BackendService - client.list( + client.get( request, metadata=[ ("key", "val"), @@ -3266,8 +3004,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListBackendServicesRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetBackendServiceRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3275,7 +3013,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "backend_service": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3287,10 +3025,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get(request) -def test_list_rest_flattened(): +def test_get_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3299,39 +3037,40 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceList() + return_value = compute.BackendService() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "backend_service": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + backend_service="backend_service_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceList.to_json(return_value) + json_return_value = compute.BackendService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3340,115 +3079,342 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListBackendServicesRequest(), + client.get( + compute.GetBackendServiceRequest(), project="project_value", + backend_service="backend_service_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetHealthBackendServiceRequest, + dict, + ], +) +def test_get_health_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + transport="rest", ) + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["resource_group_reference_resource"] = {"group": "group_value"} + request = request_type(request_init) + # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.BackendServiceList( - items=[ - compute.BackendService(), - compute.BackendService(), - compute.BackendService(), - ], - next_page_token="abc", - ), - compute.BackendServiceList( - items=[], - next_page_token="def", - ), - compute.BackendServiceList( - items=[ - compute.BackendService(), - ], - next_page_token="ghi", - ), - compute.BackendServiceList( - items=[ - compute.BackendService(), - compute.BackendService(), - ], - ), + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceGroupHealth( + kind="kind_value", ) - # Two responses for two calls - response = response + response - # Wrap the values into proper Response objs - response = tuple(compute.BackendServiceList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_health(request) - sample_request = {"project": "sample1"} + # Establish that the response is the type that we expect. + assert isinstance(response, compute.BackendServiceGroupHealth) + assert response.kind == "kind_value" - pager = client.list(request=sample_request) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.BackendService) for i in results) +def test_get_health_rest_required_fields( + request_type=compute.GetHealthBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token + request_init = {} + request_init["backend_service"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_health._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_health._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" -@pytest.mark.parametrize( - "request_type", - [ - compute.PatchBackendServiceRequest, - dict, - ], -) -def test_patch_unary_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) + request = request_type(request_init) - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "backend_service": "sample2"} - request_init["backend_service_resource"] = { - "affinity_cookie_ttl_sec": 2432, - "backends": [ - { - "balancing_mode": "balancing_mode_value", - "capacity_scaler": 0.1575, - "description": "description_value", - "failover": True, - "group": "group_value", - "max_connections": 1608, - "max_connections_per_endpoint": 2990, - "max_connections_per_instance": 2978, - "max_rate": 849, - "max_rate_per_endpoint": 0.22310000000000002, - "max_rate_per_instance": 0.22190000000000001, - "max_utilization": 0.1633, - } - ], - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_host": True, - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "include_named_cookies": [ + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceGroupHealth() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_health(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_health_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_health._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "backendService", + "project", + "resourceGroupReferenceResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_health_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_get_health" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_get_health" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.BackendServiceGroupHealth.to_json( + compute.BackendServiceGroupHealth() + ) + + request = compute.GetHealthBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.BackendServiceGroupHealth + + client.get_health( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_health_rest_bad_request( + transport: str = "rest", request_type=compute.GetHealthBackendServiceRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["resource_group_reference_resource"] = {"group": "group_value"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_health(request) + + +def test_get_health_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceGroupHealth() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_service": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service="backend_service_value", + resource_group_reference_resource=compute.ResourceGroupReference( + group="group_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_health(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/getHealth" + % client.transport._host, + args[1], + ) + + +def test_get_health_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_health( + compute.GetHealthBackendServiceRequest(), + project="project_value", + backend_service="backend_service_value", + resource_group_reference_resource=compute.ResourceGroupReference( + group="group_value" + ), + ) + + +def test_get_health_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertBackendServiceRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ "include_named_cookies_value_1", "include_named_cookies_value_2", ], @@ -3605,10 +3571,3235 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertBackendServiceRequest): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendServiceResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertBackendServiceRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertBackendServiceRequest(), + project="project_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_insert_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertBackendServiceRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendServiceResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertBackendServiceRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertBackendServiceRequest(), + project="project_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_insert_unary_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListBackendServicesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListBackendServicesRequest): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.BackendServiceList.to_json( + compute.BackendServiceList() + ) + + request = compute.ListBackendServicesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.BackendServiceList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListBackendServicesRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListBackendServicesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.BackendServiceList( + items=[ + compute.BackendService(), + compute.BackendService(), + compute.BackendService(), + ], + next_page_token="abc", + ), + compute.BackendServiceList( + items=[], + next_page_token="def", + ), + compute.BackendServiceList( + items=[ + compute.BackendService(), + ], + next_page_token="ghi", + ), + compute.BackendServiceList( + items=[ + compute.BackendService(), + compute.BackendService(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.BackendServiceList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.BackendService) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchBackendServiceRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchBackendServiceRequest): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["backend_service"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendService", + "backendServiceResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchBackendServiceRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_service": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchBackendServiceRequest(), + project="project_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_patch_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchBackendServiceRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["backend_service"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendService", + "backendServiceResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchBackendServiceRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_service": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchBackendServiceRequest(), + project="project_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_patch_unary_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetEdgeSecurityPolicyBackendServiceRequest, + dict, + ], +) +def test_set_edge_security_policy_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_edge_security_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_edge_security_policy_rest_required_fields( + request_type=compute.SetEdgeSecurityPolicyBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["backend_service"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_edge_security_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_edge_security_policy_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_edge_security_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendService", + "project", + "securityPolicyReferenceResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_edge_security_policy_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_set_edge_security_policy" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_set_edge_security_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetEdgeSecurityPolicyBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_edge_security_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_edge_security_policy_rest_bad_request( + transport: str = "rest", + request_type=compute.SetEdgeSecurityPolicyBackendServiceRequest, +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_edge_security_policy(request) + + +def test_set_edge_security_policy_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_service": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service="backend_service_value", + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_edge_security_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/setEdgeSecurityPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_edge_security_policy_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_edge_security_policy( + compute.SetEdgeSecurityPolicyBackendServiceRequest(), + project="project_value", + backend_service="backend_service_value", + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" + ), + ) + + +def test_set_edge_security_policy_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetEdgeSecurityPolicyBackendServiceRequest, + dict, + ], +) +def test_set_edge_security_policy_unary_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_edge_security_policy_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_edge_security_policy_unary_rest_required_fields( + request_type=compute.SetEdgeSecurityPolicyBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["backend_service"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_edge_security_policy_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_edge_security_policy_unary_rest_unset_required_fields(): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_edge_security_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendService", + "project", + "securityPolicyReferenceResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): + transport = transports.BackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.BackendServicesRestInterceptor(), + ) + client = BackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.BackendServicesRestInterceptor, "post_set_edge_security_policy" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_set_edge_security_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetEdgeSecurityPolicyBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_edge_security_policy_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_edge_security_policy_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetEdgeSecurityPolicyBackendServiceRequest, +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_edge_security_policy_unary(request) + + +def test_set_edge_security_policy_unary_rest_flattened(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "backend_service": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + backend_service="backend_service_value", + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_edge_security_policy_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/setEdgeSecurityPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "rest"): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_edge_security_policy_unary( + compute.SetEdgeSecurityPolicyBackendServiceRequest(), + project="project_value", + backend_service="backend_service_value", + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" + ), + ) + + +def test_set_edge_security_policy_unary_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetSecurityPolicyBackendServiceRequest, + dict, + ], +) +def test_set_security_policy_rest(request_type): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_security_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3633,8 +6824,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchBackendServiceRequest, +def test_set_security_policy_rest_required_fields( + request_type=compute.SetSecurityPolicyBackendServiceRequest, ): transport_class = transports.BackendServicesRestTransport @@ -3652,7 +6843,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_security_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3662,7 +6853,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_security_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3691,7 +6882,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -3703,33 +6894,33 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_security_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_security_policy_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_security_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "backendService", - "backendServiceResource", "project", + "securityPolicyReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_security_policy_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3742,9 +6933,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_patch" + transports.BackendServicesRestInterceptor, "post_set_security_policy" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_patch" + transports.BackendServicesRestInterceptor, "pre_set_security_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3754,189 +6945,45 @@ def test_patch_unary_rest_interceptors(null_interceptor): "uri": "my_uri", "body": None, "query_params": {}, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) - - request = compute.PatchBackendServiceRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = compute.Operation - - client.patch_unary( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchBackendServiceRequest -): - client = BackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "backend_service": "sample2"} - request_init["backend_service_resource"] = { - "affinity_cookie_ttl_sec": 2432, - "backends": [ - { - "balancing_mode": "balancing_mode_value", - "capacity_scaler": 0.1575, - "description": "description_value", - "failover": True, - "group": "group_value", - "max_connections": 1608, - "max_connections_per_endpoint": 2990, - "max_connections_per_instance": 2978, - "max_rate": 849, - "max_rate_per_endpoint": 0.22310000000000002, - "max_rate_per_instance": 0.22190000000000001, - "max_utilization": 0.1633, - } - ], - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_host": True, - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "include_named_cookies": [ - "include_named_cookies_value_1", - "include_named_cookies_value_2", - ], - "include_protocol": True, - "include_query_string": True, - "query_string_blacklist": [ - "query_string_blacklist_value_1", - "query_string_blacklist_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "circuit_breakers": { - "max_connections": 1608, - "max_pending_requests": 2149, - "max_requests": 1313, - "max_requests_per_connection": 2902, - "max_retries": 1187, - }, - "connection_draining": {"draining_timeout_sec": 2124}, - "connection_tracking_policy": { - "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", - "enable_strong_affinity": True, - "idle_timeout_sec": 1694, - "tracking_mode": "tracking_mode_value", - }, - "consistent_hash": { - "http_cookie": { - "name": "name_value", - "path": "path_value", - "ttl": {"nanos": 543, "seconds": 751}, - }, - "http_header_name": "http_header_name_value", - "minimum_ring_size": 1829, - }, - "creation_timestamp": "creation_timestamp_value", - "custom_request_headers": [ - "custom_request_headers_value_1", - "custom_request_headers_value_2", - ], - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_c_d_n": True, - "failover_policy": { - "disable_connection_drain_on_failover": True, - "drop_traffic_if_unhealthy": True, - "failover_ratio": 0.1494, - }, - "fingerprint": "fingerprint_value", - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "iap": { - "enabled": True, - "oauth2_client_id": "oauth2_client_id_value", - "oauth2_client_secret": "oauth2_client_secret_value", - "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", - }, - "id": 205, - "kind": "kind_value", - "load_balancing_scheme": "load_balancing_scheme_value", - "locality_lb_policies": [ - { - "custom_policy": {"data": "data_value", "name": "name_value"}, - "policy": {"name": "name_value"}, - } - ], - "locality_lb_policy": "locality_lb_policy_value", - "log_config": {"enable": True, "sample_rate": 0.1165}, - "max_stream_duration": {}, - "name": "name_value", - "network": "network_value", - "outlier_detection": { - "base_ejection_time": {}, - "consecutive_errors": 1956, - "consecutive_gateway_failure": 2880, - "enforcing_consecutive_errors": 3006, - "enforcing_consecutive_gateway_failure": 3930, - "enforcing_success_rate": 2334, - "interval": {}, - "max_ejection_percent": 2118, - "success_rate_minimum_hosts": 2799, - "success_rate_request_volume": 2915, - "success_rate_stdev_factor": 2663, - }, - "port": 453, - "port_name": "port_name_value", - "protocol": "protocol_value", - "region": "region_value", - "security_policy": "security_policy_value", - "security_settings": { - "client_tls_policy": "client_tls_policy_value", - "subject_alt_names": [ - "subject_alt_names_value_1", - "subject_alt_names_value_2", + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetSecurityPolicyBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_security_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - }, - "self_link": "self_link_value", - "session_affinity": "session_affinity_value", - "subsetting": {"policy": "policy_value"}, - "timeout_sec": 1185, + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_security_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetSecurityPolicyBackendServiceRequest +): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "backend_service": "sample2"} + request_init["security_policy_reference_resource"] = { + "security_policy": "security_policy_value" } request = request_type(request_init) @@ -3949,10 +6996,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_security_policy(request) -def test_patch_unary_rest_flattened(): +def test_set_security_policy_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3970,8 +7017,8 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", backend_service="backend_service_value", - backend_service_resource=compute.BackendService( - affinity_cookie_ttl_sec=2432 + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" ), ) mock_args.update(sample_request) @@ -3984,20 +7031,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_security_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/setSecurityPolicy" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_security_policy_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4006,17 +7053,17 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchBackendServiceRequest(), + client.set_security_policy( + compute.SetSecurityPolicyBackendServiceRequest(), project="project_value", backend_service="backend_service_value", - backend_service_resource=compute.BackendService( - affinity_cookie_ttl_sec=2432 + security_policy_reference_resource=compute.SecurityPolicyReference( + security_policy="security_policy_value" ), ) -def test_patch_unary_rest_error(): +def test_set_security_policy_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4025,11 +7072,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetEdgeSecurityPolicyBackendServiceRequest, + compute.SetSecurityPolicyBackendServiceRequest, dict, ], ) -def test_set_edge_security_policy_unary_rest(request_type): +def test_set_security_policy_unary_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4076,36 +7123,14 @@ def test_set_edge_security_policy_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_edge_security_policy_unary(request) + response = client.set_security_policy_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_edge_security_policy_unary_rest_required_fields( - request_type=compute.SetEdgeSecurityPolicyBackendServiceRequest, +def test_set_security_policy_unary_rest_required_fields( + request_type=compute.SetSecurityPolicyBackendServiceRequest, ): transport_class = transports.BackendServicesRestTransport @@ -4123,7 +7148,7 @@ def test_set_edge_security_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + ).set_security_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4133,7 +7158,7 @@ def test_set_edge_security_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_edge_security_policy._get_unset_required_fields(jsonified_request) + ).set_security_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -4174,19 +7199,19 @@ def test_set_edge_security_policy_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_edge_security_policy_unary(request) + response = client.set_security_policy_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_edge_security_policy_unary_rest_unset_required_fields(): +def test_set_security_policy_unary_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_edge_security_policy._get_unset_required_fields({}) + unset_fields = transport.set_security_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -4200,7 +7225,7 @@ def test_set_edge_security_policy_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): +def test_set_security_policy_unary_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4213,9 +7238,9 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_set_edge_security_policy" + transports.BackendServicesRestInterceptor, "post_set_security_policy" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_set_edge_security_policy" + transports.BackendServicesRestInterceptor, "pre_set_security_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4232,7 +7257,7 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetEdgeSecurityPolicyBackendServiceRequest() + request = compute.SetSecurityPolicyBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4240,7 +7265,7 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_edge_security_policy_unary( + client.set_security_policy_unary( request, metadata=[ ("key", "val"), @@ -4252,9 +7277,8 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_edge_security_policy_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetEdgeSecurityPolicyBackendServiceRequest, +def test_set_security_policy_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetSecurityPolicyBackendServiceRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4277,10 +7301,10 @@ def test_set_edge_security_policy_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_edge_security_policy_unary(request) + client.set_security_policy_unary(request) -def test_set_edge_security_policy_unary_rest_flattened(): +def test_set_security_policy_unary_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4312,20 +7336,20 @@ def test_set_edge_security_policy_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_edge_security_policy_unary(**mock_args) + client.set_security_policy_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/setEdgeSecurityPolicy" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/setSecurityPolicy" % client.transport._host, args[1], ) -def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "rest"): +def test_set_security_policy_unary_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4334,8 +7358,8 @@ def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_edge_security_policy_unary( - compute.SetEdgeSecurityPolicyBackendServiceRequest(), + client.set_security_policy_unary( + compute.SetSecurityPolicyBackendServiceRequest(), project="project_value", backend_service="backend_service_value", security_policy_reference_resource=compute.SecurityPolicyReference( @@ -4344,7 +7368,7 @@ def test_set_edge_security_policy_unary_rest_flattened_error(transport: str = "r ) -def test_set_edge_security_policy_unary_rest_error(): +def test_set_security_policy_unary_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4353,11 +7377,11 @@ def test_set_edge_security_policy_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetSecurityPolicyBackendServiceRequest, + compute.UpdateBackendServiceRequest, dict, ], ) -def test_set_security_policy_unary_rest(request_type): +def test_update_rest(request_type): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4365,8 +7389,152 @@ def test_set_security_policy_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_service": "sample2"} - request_init["security_policy_reference_resource"] = { - "security_policy": "security_policy_value" + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, } request = request_type(request_init) @@ -4404,10 +7572,10 @@ def test_set_security_policy_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_security_policy_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -4432,9 +7600,7 @@ def test_set_security_policy_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_security_policy_unary_rest_required_fields( - request_type=compute.SetSecurityPolicyBackendServiceRequest, -): +def test_update_rest_required_fields(request_type=compute.UpdateBackendServiceRequest): transport_class = transports.BackendServicesRestTransport request_init = {} @@ -4451,7 +7617,7 @@ def test_set_security_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_security_policy._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4461,7 +7627,7 @@ def test_set_security_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_security_policy._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -4490,7 +7656,7 @@ def test_set_security_policy_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -4502,33 +7668,33 @@ def test_set_security_policy_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_security_policy_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_security_policy_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_security_policy._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "backendService", + "backendServiceResource", "project", - "securityPolicyReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_security_policy_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.BackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4541,9 +7707,9 @@ def test_set_security_policy_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.BackendServicesRestInterceptor, "post_set_security_policy" + transports.BackendServicesRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.BackendServicesRestInterceptor, "pre_set_security_policy" + transports.BackendServicesRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4560,7 +7726,7 @@ def test_set_security_policy_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetSecurityPolicyBackendServiceRequest() + request = compute.UpdateBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4568,7 +7734,7 @@ def test_set_security_policy_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_security_policy_unary( + client.update( request, metadata=[ ("key", "val"), @@ -4580,8 +7746,8 @@ def test_set_security_policy_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_security_policy_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetSecurityPolicyBackendServiceRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateBackendServiceRequest ): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4590,8 +7756,152 @@ def test_set_security_policy_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "backend_service": "sample2"} - request_init["security_policy_reference_resource"] = { - "security_policy": "security_policy_value" + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, } request = request_type(request_init) @@ -4604,10 +7914,10 @@ def test_set_security_policy_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_security_policy_unary(request) + client.update(request) -def test_set_security_policy_unary_rest_flattened(): +def test_update_rest_flattened(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4625,8 +7935,8 @@ def test_set_security_policy_unary_rest_flattened(): mock_args = dict( project="project_value", backend_service="backend_service_value", - security_policy_reference_resource=compute.SecurityPolicyReference( - security_policy="security_policy_value" + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 ), ) mock_args.update(sample_request) @@ -4639,20 +7949,20 @@ def test_set_security_policy_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_security_policy_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}/setSecurityPolicy" + "%s/compute/v1/projects/{project}/global/backendServices/{backend_service}" % client.transport._host, args[1], ) -def test_set_security_policy_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4661,17 +7971,17 @@ def test_set_security_policy_unary_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_security_policy_unary( - compute.SetSecurityPolicyBackendServiceRequest(), + client.update( + compute.UpdateBackendServiceRequest(), project="project_value", backend_service="backend_service_value", - security_policy_reference_resource=compute.SecurityPolicyReference( - security_policy="security_policy_value" + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 ), ) -def test_set_security_policy_unary_rest_error(): +def test_update_rest_error(): client = BackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4879,28 +8189,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -5367,6 +8655,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = BackendServicesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_backend_services_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -5409,6 +8710,14 @@ def test_backend_services_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_backend_services_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_disk_types.py b/tests/unit/gapic/compute_v1/test_disk_types.py index 1e21e1acf..05dacdca2 100644 --- a/tests/unit/gapic/compute_v1/test_disk_types.py +++ b/tests/unit/gapic/compute_v1/test_disk_types.py @@ -1570,6 +1570,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = DiskTypesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_disk_types_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1603,6 +1616,14 @@ def test_disk_types_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_disk_types_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_disks.py b/tests/unit/gapic/compute_v1/test_disks.py index 62cfab0e3..86ce50da2 100644 --- a/tests/unit/gapic/compute_v1/test_disks.py +++ b/tests/unit/gapic/compute_v1/test_disks.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -509,7 +511,7 @@ def test_disks_client_client_options_credentials_file( dict, ], ) -def test_add_resource_policies_unary_rest(request_type): +def test_add_resource_policies_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -556,10 +558,10 @@ def test_add_resource_policies_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_resource_policies_unary(request) + response = client.add_resource_policies(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -584,7 +586,7 @@ def test_add_resource_policies_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_resource_policies_unary_rest_required_fields( +def test_add_resource_policies_rest_required_fields( request_type=compute.AddResourcePoliciesDiskRequest, ): transport_class = transports.DisksRestTransport @@ -658,14 +660,14 @@ def test_add_resource_policies_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_resource_policies_unary(request) + response = client.add_resource_policies(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_resource_policies_unary_rest_unset_required_fields(): +def test_add_resource_policies_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -685,7 +687,7 @@ def test_add_resource_policies_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_resource_policies_unary_rest_interceptors(null_interceptor): +def test_add_resource_policies_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -723,7 +725,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_resource_policies_unary( + client.add_resource_policies( request, metadata=[ ("key", "val"), @@ -735,7 +737,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_resource_policies_unary_rest_bad_request( +def test_add_resource_policies_rest_bad_request( transport: str = "rest", request_type=compute.AddResourcePoliciesDiskRequest ): client = DisksClient( @@ -759,10 +761,10 @@ def test_add_resource_policies_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_resource_policies_unary(request) + client.add_resource_policies(request) -def test_add_resource_policies_unary_rest_flattened(): +def test_add_resource_policies_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -795,7 +797,7 @@ def test_add_resource_policies_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_resource_policies_unary(**mock_args) + client.add_resource_policies(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -808,7 +810,7 @@ def test_add_resource_policies_unary_rest_flattened(): ) -def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest"): +def test_add_resource_policies_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -817,7 +819,7 @@ def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_resource_policies_unary( + client.add_resource_policies( compute.AddResourcePoliciesDiskRequest(), project="project_value", zone="zone_value", @@ -828,7 +830,7 @@ def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest ) -def test_add_resource_policies_unary_rest_error(): +def test_add_resource_policies_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -837,55 +839,72 @@ def test_add_resource_policies_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListDisksRequest, + compute.AddResourcePoliciesDiskRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_resource_policies_unary_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.DiskAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_resource_policies_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert isinstance(response, compute.Operation) -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListDisksRequest, +def test_add_resource_policies_unary_rest_required_fields( + request_type=compute.AddResourcePoliciesDiskRequest, ): transport_class = transports.DisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" + request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -897,32 +916,29 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -931,7 +947,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.DiskAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -942,47 +958,46 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_resource_policies_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_resource_policies_unary_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_resource_policies._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "disk", + "disksAddResourcePoliciesRequestResource", + "project", + "zone", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_resource_policies_unary_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -993,9 +1008,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_aggregated_list" + transports.DisksRestInterceptor, "post_add_resource_policies" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_aggregated_list" + transports.DisksRestInterceptor, "pre_add_resource_policies" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1010,19 +1025,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.DiskAggregatedList.to_json( - compute.DiskAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListDisksRequest() + request = compute.AddResourcePoliciesDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_resource_policies_unary( request, metadata=[ ("key", "val"), @@ -1034,8 +1047,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListDisksRequest +def test_add_resource_policies_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddResourcePoliciesDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1043,7 +1056,10 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1055,10 +1071,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_resource_policies_unary(request) -def test_aggregated_list_rest_flattened(): +def test_add_resource_policies_unary_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1067,39 +1083,44 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.DiskAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", + zone="zone_value", + disk="disk_value", + disks_add_resource_policies_request_resource=compute.DisksAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_resource_policies_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/disks" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/addResourcePolicies" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1108,202 +1129,75 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListDisksRequest(), + client.add_resource_policies_unary( + compute.AddResourcePoliciesDiskRequest(), project="project_value", + zone="zone_value", + disk="disk_value", + disks_add_resource_policies_request_resource=compute.DisksAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_resource_policies_unary_rest_error(): client = DisksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.DiskAggregatedList( - items={ - "a": compute.DisksScopedList(), - "b": compute.DisksScopedList(), - "c": compute.DisksScopedList(), - }, - next_page_token="abc", - ), - compute.DiskAggregatedList( - items={}, - next_page_token="def", - ), - compute.DiskAggregatedList( - items={ - "g": compute.DisksScopedList(), - }, - next_page_token="ghi", - ), - compute.DiskAggregatedList( - items={ - "h": compute.DisksScopedList(), - "i": compute.DisksScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.DiskAggregatedList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.DisksScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == (str, compute.DisksScopedList) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.DisksScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.CreateSnapshotDiskRequest, + compute.AggregatedListDisksRequest, dict, ], ) -def test_create_snapshot_unary_rest(request_type): +def test_aggregated_list_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request_init["snapshot_resource"] = { - "auto_created": True, - "chain_name": "chain_name_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_size_gb": 1261, - "download_bytes": 1502, - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "snapshot_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "status": "status_value", - "storage_bytes": 1403, - "storage_bytes_status": "storage_bytes_status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.DiskAggregatedList( + id="id_value", kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.DiskAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_snapshot_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_create_snapshot_unary_rest_required_fields( - request_type=compute.CreateSnapshotDiskRequest, +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListDisksRequest, ): transport_class = transports.DisksRestTransport request_init = {} - request_init["disk"] = "" request_init["project"] = "" - request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1315,34 +1209,32 @@ def test_create_snapshot_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_snapshot._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" - jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_snapshot._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "guest_flush", - "request_id", + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", ) ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "disk" in jsonified_request - assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "zone" in jsonified_request - assert jsonified_request["zone"] == "zone_value" client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1351,7 +1243,7 @@ def test_create_snapshot_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.DiskAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1362,51 +1254,47 @@ def test_create_snapshot_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.DiskAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_snapshot_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_snapshot_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_snapshot._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "guestFlush", - "requestId", - ) - ) - & set( - ( - "disk", - "project", - "snapshotResource", - "zone", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_snapshot_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -1417,9 +1305,9 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_create_snapshot" + transports.DisksRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_create_snapshot" + transports.DisksRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1434,17 +1322,19 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.DiskAggregatedList.to_json( + compute.DiskAggregatedList() + ) - request = compute.CreateSnapshotDiskRequest() + request = compute.AggregatedListDisksRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.DiskAggregatedList - client.create_snapshot_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -1456,8 +1346,8 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_snapshot_unary_rest_bad_request( - transport: str = "rest", request_type=compute.CreateSnapshotDiskRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListDisksRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1465,39 +1355,7 @@ def test_create_snapshot_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request_init["snapshot_resource"] = { - "auto_created": True, - "chain_name": "chain_name_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_size_gb": 1261, - "download_bytes": 1502, - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "snapshot_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "status": "status_value", - "storage_bytes": 1403, - "storage_bytes_status": "storage_bytes_status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1509,10 +1367,10 @@ def test_create_snapshot_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_snapshot_unary(request) + client.aggregated_list(request) -def test_create_snapshot_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1521,42 +1379,39 @@ def test_create_snapshot_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.DiskAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - zone="zone_value", - disk="disk_value", - snapshot_resource=compute.Snapshot(auto_created=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.DiskAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_snapshot_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/createSnapshot" + "%s/compute/v1/projects/{project}/aggregated/disks" % client.transport._host, args[1], ) -def test_create_snapshot_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1565,76 +1420,169 @@ def test_create_snapshot_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_snapshot_unary( - compute.CreateSnapshotDiskRequest(), + client.aggregated_list( + compute.AggregatedListDisksRequest(), project="project_value", - zone="zone_value", - disk="disk_value", - snapshot_resource=compute.Snapshot(auto_created=True), ) -def test_create_snapshot_unary_rest_error(): - client = DisksClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - -@pytest.mark.parametrize( - "request_type", - [ - compute.DeleteDiskRequest, - dict, - ], -) -def test_delete_unary_rest(request_type): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request = request_type(request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", - ) - - # Wrap the value into a proper Response obj + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.DiskAggregatedList( + items={ + "a": compute.DisksScopedList(), + "b": compute.DisksScopedList(), + "c": compute.DisksScopedList(), + }, + next_page_token="abc", + ), + compute.DiskAggregatedList( + items={}, + next_page_token="def", + ), + compute.DiskAggregatedList( + items={ + "g": compute.DisksScopedList(), + }, + next_page_token="ghi", + ), + compute.DiskAggregatedList( + items={ + "h": compute.DisksScopedList(), + "i": compute.DisksScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.DiskAggregatedList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.DisksScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == (str, compute.DisksScopedList) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.DisksScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.CreateSnapshotDiskRequest, + dict, + ], +) +def test_create_snapshot_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.create_snapshot(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1659,7 +1607,9 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteDiskRequest): +def test_create_snapshot_rest_required_fields( + request_type=compute.CreateSnapshotDiskRequest, +): transport_class = transports.DisksRestTransport request_init = {} @@ -1677,7 +1627,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteDiskReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1688,9 +1638,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteDiskReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "guest_flush", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1719,9 +1674,10 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteDiskReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1730,25 +1686,31 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteDiskReques response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.create_snapshot(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_create_snapshot_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.create_snapshot._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "guestFlush", + "requestId", + ) + ) & set( ( "disk", "project", + "snapshotResource", "zone", ) ) @@ -1756,7 +1718,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_create_snapshot_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -1767,9 +1729,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_delete" + transports.DisksRestInterceptor, "post_create_snapshot" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_delete" + transports.DisksRestInterceptor, "pre_create_snapshot" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1786,7 +1748,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteDiskRequest() + request = compute.CreateSnapshotDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1794,7 +1756,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.create_snapshot( request, metadata=[ ("key", "val"), @@ -1806,8 +1768,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteDiskRequest +def test_create_snapshot_rest_bad_request( + transport: str = "rest", request_type=compute.CreateSnapshotDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1816,6 +1778,38 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1827,10 +1821,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.create_snapshot(request) -def test_delete_unary_rest_flattened(): +def test_create_snapshot_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1849,6 +1843,7 @@ def test_delete_unary_rest_flattened(): project="project_value", zone="zone_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) mock_args.update(sample_request) @@ -1860,20 +1855,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.create_snapshot(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/createSnapshot" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_create_snapshot_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1882,15 +1877,16 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteDiskRequest(), + client.create_snapshot( + compute.CreateSnapshotDiskRequest(), project="project_value", zone="zone_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) -def test_delete_unary_rest_error(): +def test_create_snapshot_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1899,11 +1895,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetDiskRequest, + compute.CreateSnapshotDiskRequest, dict, ], ) -def test_get_rest(request_type): +def test_create_snapshot_unary_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1911,89 +1907,83 @@ def test_get_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Disk( - creation_timestamp="creation_timestamp_value", - description="description_value", - id=205, - kind="kind_value", - label_fingerprint="label_fingerprint_value", - last_attach_timestamp="last_attach_timestamp_value", - last_detach_timestamp="last_detach_timestamp_value", - license_codes=[1360], - licenses=["licenses_value"], - location_hint="location_hint_value", - name="name_value", - options="options_value", - physical_block_size_bytes=2663, - provisioned_iops=1740, - region="region_value", - replica_zones=["replica_zones_value"], - resource_policies=["resource_policies_value"], - satisfies_pzs=True, - self_link="self_link_value", - size_gb=739, - source_disk="source_disk_value", - source_disk_id="source_disk_id_value", - source_image="source_image_value", - source_image_id="source_image_id_value", - source_snapshot="source_snapshot_value", - source_snapshot_id="source_snapshot_id_value", - source_storage_object="source_storage_object_value", - status="status_value", - type_="type__value", - users=["users_value"], + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Disk.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.create_snapshot_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Disk) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.last_attach_timestamp == "last_attach_timestamp_value" - assert response.last_detach_timestamp == "last_detach_timestamp_value" - assert response.license_codes == [1360] - assert response.licenses == ["licenses_value"] - assert response.location_hint == "location_hint_value" - assert response.name == "name_value" - assert response.options == "options_value" - assert response.physical_block_size_bytes == 2663 - assert response.provisioned_iops == 1740 - assert response.region == "region_value" - assert response.replica_zones == ["replica_zones_value"] - assert response.resource_policies == ["resource_policies_value"] - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.size_gb == 739 - assert response.source_disk == "source_disk_value" - assert response.source_disk_id == "source_disk_id_value" - assert response.source_image == "source_image_value" - assert response.source_image_id == "source_image_id_value" - assert response.source_snapshot == "source_snapshot_value" - assert response.source_snapshot_id == "source_snapshot_id_value" - assert response.source_storage_object == "source_storage_object_value" - assert response.status == "status_value" - assert response.type_ == "type__value" - assert response.users == ["users_value"] - assert response.zone == "zone_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetDiskRequest): +def test_create_snapshot_unary_rest_required_fields( + request_type=compute.CreateSnapshotDiskRequest, +): transport_class = transports.DisksRestTransport request_init = {} @@ -2011,7 +2001,7 @@ def test_get_rest_required_fields(request_type=compute.GetDiskRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2022,7 +2012,14 @@ def test_get_rest_required_fields(request_type=compute.GetDiskRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "guest_flush", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2040,7 +2037,7 @@ def test_get_rest_required_fields(request_type=compute.GetDiskRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Disk() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2051,36 +2048,43 @@ def test_get_rest_required_fields(request_type=compute.GetDiskRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Disk.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.create_snapshot_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_create_snapshot_unary_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.create_snapshot._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "guestFlush", + "requestId", + ) + ) & set( ( "disk", "project", + "snapshotResource", "zone", ) ) @@ -2088,7 +2092,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_create_snapshot_unary_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -2099,9 +2103,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_get" + transports.DisksRestInterceptor, "post_create_snapshot" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_get" + transports.DisksRestInterceptor, "pre_create_snapshot" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2116,17 +2120,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Disk.to_json(compute.Disk()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetDiskRequest() + request = compute.CreateSnapshotDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Disk + post.return_value = compute.Operation - client.get( + client.create_snapshot_unary( request, metadata=[ ("key", "val"), @@ -2138,8 +2142,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetDiskRequest +def test_create_snapshot_unary_rest_bad_request( + transport: str = "rest", request_type=compute.CreateSnapshotDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2148,6 +2152,38 @@ def test_get_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2159,10 +2195,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.create_snapshot_unary(request) -def test_get_rest_flattened(): +def test_create_snapshot_unary_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2171,7 +2207,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Disk() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} @@ -2181,31 +2217,32 @@ def test_get_rest_flattened(): project="project_value", zone="zone_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Disk.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.create_snapshot_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/createSnapshot" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_create_snapshot_unary_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2214,15 +2251,16 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetDiskRequest(), + client.create_snapshot_unary( + compute.CreateSnapshotDiskRequest(), project="project_value", zone="zone_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) -def test_get_rest_error(): +def test_create_snapshot_unary_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2231,52 +2269,88 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyDiskRequest, + compute.DeleteDiskRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 - - -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyDiskRequest, -): + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_delete_rest_required_fields(request_type=compute.DeleteDiskRequest): transport_class = transports.DisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2289,27 +2363,27 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -2320,7 +2394,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2331,36 +2405,36 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "disk", "project", - "resource", "zone", ) ) @@ -2368,7 +2442,7 @@ def test_get_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -2379,9 +2453,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_get_iam_policy" + transports.DisksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_get_iam_policy" + transports.DisksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2396,17 +2470,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyDiskRequest() + request = compute.DeleteDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete( request, metadata=[ ("key", "val"), @@ -2418,8 +2492,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyDiskRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2427,7 +2501,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2439,10 +2513,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2451,45 +2525,41 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "resource": "sample3", - } + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", + disk="disk_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2498,15 +2568,15 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyDiskRequest(), + client.delete( + compute.DeleteDiskRequest(), project="project_value", zone="zone_value", - resource="resource_value", + disk="disk_value", ) -def test_get_iam_policy_rest_error(): +def test_delete_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2515,62 +2585,18 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertDiskRequest, + compute.DeleteDiskRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["disk_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "guest_os_features": [{"type_": "type__value"}], - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_attach_timestamp": "last_attach_timestamp_value", - "last_detach_timestamp": "last_detach_timestamp_value", - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "options": "options_value", - "physical_block_size_bytes": 2663, - "provisioned_iops": 1740, - "region": "region_value", - "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "self_link": "self_link_value", - "size_gb": 739, - "source_disk": "source_disk_value", - "source_disk_id": "source_disk_id_value", - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_image_id": "source_image_id_value", - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - "source_snapshot_id": "source_snapshot_id_value", - "source_storage_object": "source_storage_object_value", - "status": "status_value", - "type_": "type__value", - "users": ["users_value_1", "users_value_2"], - "zone": "zone_value", - } + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2607,38 +2633,17 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields(request_type=compute.InsertDiskRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteDiskRequest): transport_class = transports.DisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -2652,27 +2657,25 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertDiskReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "source_image", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -2696,10 +2699,9 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertDiskReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2708,29 +2710,24 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertDiskReques response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "sourceImage", - ) - ) + set(("requestId",)) & set( ( - "diskResource", + "disk", "project", "zone", ) @@ -2739,7 +2736,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -2750,9 +2747,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_insert" + transports.DisksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_insert" + transports.DisksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2769,7 +2766,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertDiskRequest() + request = compute.DeleteDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2777,7 +2774,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2789,8 +2786,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertDiskRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2798,51 +2795,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["disk_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "guest_os_features": [{"type_": "type__value"}], - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_attach_timestamp": "last_attach_timestamp_value", - "last_detach_timestamp": "last_detach_timestamp_value", - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "options": "options_value", - "physical_block_size_bytes": 2663, - "provisioned_iops": 1740, - "region": "region_value", - "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "self_link": "self_link_value", - "size_gb": 739, - "source_disk": "source_disk_value", - "source_disk_id": "source_disk_id_value", - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_image_id": "source_image_id_value", - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - "source_snapshot_id": "source_snapshot_id_value", - "source_storage_object": "source_storage_object_value", - "status": "status_value", - "type_": "type__value", - "users": ["users_value_1", "users_value_2"], - "zone": "zone_value", - } + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2854,10 +2807,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2869,13 +2822,13 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + disk="disk_value", ) mock_args.update(sample_request) @@ -2887,20 +2840,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2909,15 +2862,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertDiskRequest(), + client.delete_unary( + compute.DeleteDiskRequest(), project="project_value", zone="zone_value", - disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + disk="disk_value", ) -def test_insert_unary_rest_error(): +def test_delete_unary_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2926,50 +2879,105 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListDisksRequest, + compute.GetDiskRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.DiskList( - id="id_value", + return_value = compute.Disk( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, kind="kind_value", - next_page_token="next_page_token_value", + label_fingerprint="label_fingerprint_value", + last_attach_timestamp="last_attach_timestamp_value", + last_detach_timestamp="last_detach_timestamp_value", + license_codes=[1360], + licenses=["licenses_value"], + location_hint="location_hint_value", + name="name_value", + options="options_value", + physical_block_size_bytes=2663, + provisioned_iops=1740, + region="region_value", + replica_zones=["replica_zones_value"], + resource_policies=["resource_policies_value"], + satisfies_pzs=True, self_link="self_link_value", + size_gb=739, + source_disk="source_disk_value", + source_disk_id="source_disk_id_value", + source_image="source_image_value", + source_image_id="source_image_id_value", + source_snapshot="source_snapshot_value", + source_snapshot_id="source_snapshot_id_value", + source_storage_object="source_storage_object_value", + status="status_value", + type_="type__value", + users=["users_value"], + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskList.to_json(return_value) + json_return_value = compute.Disk.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.Disk) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.last_attach_timestamp == "last_attach_timestamp_value" + assert response.last_detach_timestamp == "last_detach_timestamp_value" + assert response.license_codes == [1360] + assert response.licenses == ["licenses_value"] + assert response.location_hint == "location_hint_value" + assert response.name == "name_value" + assert response.options == "options_value" + assert response.physical_block_size_bytes == 2663 + assert response.provisioned_iops == 1740 + assert response.region == "region_value" + assert response.replica_zones == ["replica_zones_value"] + assert response.resource_policies == ["resource_policies_value"] + assert response.satisfies_pzs is True assert response.self_link == "self_link_value" + assert response.size_gb == 739 + assert response.source_disk == "source_disk_value" + assert response.source_disk_id == "source_disk_id_value" + assert response.source_image == "source_image_value" + assert response.source_image_id == "source_image_id_value" + assert response.source_snapshot == "source_snapshot_value" + assert response.source_snapshot_id == "source_snapshot_id_value" + assert response.source_storage_object == "source_storage_object_value" + assert response.status == "status_value" + assert response.type_ == "type__value" + assert response.users == ["users_value"] + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListDisksRequest): +def test_get_rest_required_fields(request_type=compute.GetDiskRequest): transport_class = transports.DisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -2983,30 +2991,23 @@ def test_list_rest_required_fields(request_type=compute.ListDisksRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3019,7 +3020,7 @@ def test_list_rest_required_fields(request_type=compute.ListDisksRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.DiskList() + return_value = compute.Disk() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3037,35 +3038,28 @@ def test_list_rest_required_fields(request_type=compute.ListDisksRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskList.to_json(return_value) + json_return_value = compute.Disk.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( + "disk", "project", "zone", ) @@ -3074,7 +3068,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -3085,9 +3079,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_list" + transports.DisksRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_list" + transports.DisksRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3102,17 +3096,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.DiskList.to_json(compute.DiskList()) + req.return_value._content = compute.Disk.to_json(compute.Disk()) - request = compute.ListDisksRequest() + request = compute.GetDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskList + post.return_value = compute.Disk - client.list( + client.get( request, metadata=[ ("key", "val"), @@ -3124,8 +3118,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListDisksRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3133,7 +3127,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3145,10 +3139,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get(request) -def test_list_rest_flattened(): +def test_get_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3157,40 +3151,41 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.DiskList() + return_value = compute.Disk() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", + disk="disk_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskList.to_json(return_value) + json_return_value = compute.Disk.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3199,164 +3194,69 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListDisksRequest(), + client.get( + compute.GetDiskRequest(), project="project_value", zone="zone_value", + disk="disk_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_rest_error(): client = DisksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.DiskList( - items=[ - compute.Disk(), - compute.Disk(), - compute.Disk(), - ], - next_page_token="abc", - ), - compute.DiskList( - items=[], - next_page_token="def", - ), - compute.DiskList( - items=[ - compute.Disk(), - ], - next_page_token="ghi", - ), - compute.DiskList( - items=[ - compute.Disk(), - compute.Disk(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.DiskList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Disk) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.RemoveResourcePoliciesDiskRequest, + compute.GetIamPolicyDiskRequest, dict, ], ) -def test_remove_resource_policies_unary_rest(request_type): +def test_get_iam_policy_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request_init["disks_remove_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] - } + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_resource_policies_unary(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_remove_resource_policies_unary_rest_required_fields( - request_type=compute.RemoveResourcePoliciesDiskRequest, +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyDiskRequest, ): transport_class = transports.DisksRestTransport request_init = {} - request_init["disk"] = "" request_init["project"] = "" + request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -3369,27 +3269,27 @@ def test_remove_resource_policies_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_resource_policies._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_resource_policies._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "disk" in jsonified_request - assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -3400,7 +3300,7 @@ def test_remove_resource_policies_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3411,38 +3311,36 @@ def test_remove_resource_policies_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_resource_policies_unary(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_resource_policies_unary_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("optionsRequestedPolicyVersion",)) & set( ( - "disk", - "disksRemoveResourcePoliciesRequestResource", "project", + "resource", "zone", ) ) @@ -3450,7 +3348,7 @@ def test_remove_resource_policies_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -3461,9 +3359,9 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_remove_resource_policies" + transports.DisksRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_remove_resource_policies" + transports.DisksRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3478,17 +3376,17 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.RemoveResourcePoliciesDiskRequest() + request = compute.GetIamPolicyDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Policy - client.remove_resource_policies_unary( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -3500,8 +3398,8 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_resource_policies_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemoveResourcePoliciesDiskRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3509,10 +3407,7 @@ def test_remove_resource_policies_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request_init["disks_remove_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] - } + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3524,10 +3419,10 @@ def test_remove_resource_policies_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_resource_policies_unary(request) + client.get_iam_policy(request) -def test_remove_resource_policies_unary_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3536,44 +3431,45 @@ def test_remove_resource_policies_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - disk="disk_value", - disks_remove_resource_policies_request_resource=compute.DisksRemoveResourcePoliciesRequest( - resource_policies=["resource_policies_value"] - ), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_resource_policies_unary(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/removeResourcePolicies" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3582,18 +3478,15 @@ def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_resource_policies_unary( - compute.RemoveResourcePoliciesDiskRequest(), + client.get_iam_policy( + compute.GetIamPolicyDiskRequest(), project="project_value", zone="zone_value", - disk="disk_value", - disks_remove_resource_policies_request_resource=compute.DisksRemoveResourcePoliciesRequest( - resource_policies=["resource_policies_value"] - ), + resource="resource_value", ) -def test_remove_resource_policies_unary_rest_error(): +def test_get_iam_policy_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3602,19 +3495,62 @@ def test_remove_resource_policies_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ResizeDiskRequest, + compute.InsertDiskRequest, dict, ], ) -def test_resize_unary_rest(request_type): +def test_insert_rest(request_type): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request_init["disks_resize_request_resource"] = {"size_gb": 739} + request_init = {"project": "sample1", "zone": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3651,10 +3587,10 @@ def test_resize_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3679,11 +3615,10 @@ def test_resize_unary_rest(request_type): assert response.zone == "zone_value" -def test_resize_unary_rest_required_fields(request_type=compute.ResizeDiskRequest): +def test_insert_rest_required_fields(request_type=compute.InsertDiskRequest): transport_class = transports.DisksRestTransport request_init = {} - request_init["disk"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3697,25 +3632,27 @@ def test_resize_unary_rest_required_fields(request_type=compute.ResizeDiskReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "request_id", + "source_image", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "disk" in jsonified_request - assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3751,25 +3688,29 @@ def test_resize_unary_rest_required_fields(request_type=compute.ResizeDiskReques response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_resize_unary_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.resize._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "requestId", + "sourceImage", + ) + ) & set( ( - "disk", - "disksResizeRequestResource", + "diskResource", "project", "zone", ) @@ -3778,7 +3719,7 @@ def test_resize_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_resize_unary_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -3789,9 +3730,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_resize" + transports.DisksRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_resize" + transports.DisksRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3808,7 +3749,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ResizeDiskRequest() + request = compute.InsertDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3816,7 +3757,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.resize_unary( + client.insert( request, metadata=[ ("key", "val"), @@ -3828,8 +3769,8 @@ def test_resize_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_resize_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ResizeDiskRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3837,15 +3778,2053 @@ def test_resize_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} - request_init["disks_resize_request_resource"] = {"size_gb": 739} - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj + request_init = {"project": "sample1", "zone": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertDiskRequest(), + project="project_value", + zone="zone_value", + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + ) + + +def test_insert_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertDiskRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertDiskRequest): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_image", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceImage", + ) + ) + & set( + ( + "diskResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), + ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertDiskRequest +): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertDiskRequest(), + project="project_value", + zone="zone_value", + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + ) + + +def test_insert_unary_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListDisksRequest, + dict, + ], +) +def test_list_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.DiskList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.DiskList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListDisksRequest): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.DiskList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.DiskList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), + ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.DiskList.to_json(compute.DiskList()) + + request = compute.ListDisksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.DiskList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListDisksRequest +): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.DiskList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.DiskList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListDisksRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.DiskList( + items=[ + compute.Disk(), + compute.Disk(), + compute.Disk(), + ], + next_page_token="abc", + ), + compute.DiskList( + items=[], + next_page_token="def", + ), + compute.DiskList( + items=[ + compute.Disk(), + ], + next_page_token="ghi", + ), + compute.DiskList( + items=[ + compute.Disk(), + compute.Disk(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.DiskList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Disk) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveResourcePoliciesDiskRequest, + dict, + ], +) +def test_remove_resource_policies_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_resource_policies(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_remove_resource_policies_rest_required_fields( + request_type=compute.RemoveResourcePoliciesDiskRequest, +): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_resource_policies(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_resource_policies_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "disksRemoveResourcePoliciesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_resource_policies_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), + ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_remove_resource_policies" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_remove_resource_policies" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveResourcePoliciesDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_resource_policies( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_resource_policies_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveResourcePoliciesDiskRequest +): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_resource_policies(request) + + +def test_remove_resource_policies_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + disk="disk_value", + disks_remove_resource_policies_request_resource=compute.DisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_resource_policies(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/removeResourcePolicies" + % client.transport._host, + args[1], + ) + + +def test_remove_resource_policies_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_resource_policies( + compute.RemoveResourcePoliciesDiskRequest(), + project="project_value", + zone="zone_value", + disk="disk_value", + disks_remove_resource_policies_request_resource=compute.DisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + + +def test_remove_resource_policies_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveResourcePoliciesDiskRequest, + dict, + ], +) +def test_remove_resource_policies_unary_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_resource_policies_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_remove_resource_policies_unary_rest_required_fields( + request_type=compute.RemoveResourcePoliciesDiskRequest, +): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_resource_policies_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_resource_policies_unary_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "disksRemoveResourcePoliciesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), + ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_remove_resource_policies" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_remove_resource_policies" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveResourcePoliciesDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_resource_policies_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_resource_policies_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveResourcePoliciesDiskRequest +): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_resource_policies_unary(request) + + +def test_remove_resource_policies_unary_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + disk="disk_value", + disks_remove_resource_policies_request_resource=compute.DisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_resource_policies_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/removeResourcePolicies" + % client.transport._host, + args[1], + ) + + +def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_resource_policies_unary( + compute.RemoveResourcePoliciesDiskRequest(), + project="project_value", + zone="zone_value", + disk="disk_value", + disks_remove_resource_policies_request_resource=compute.DisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + + +def test_remove_resource_policies_unary_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeDiskRequest, + dict, + ], +) +def test_resize_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_resize_rest_required_fields(request_type=compute.ResizeDiskRequest): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "disksResizeRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), + ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeDiskRequest +): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize(request) + + +def test_resize_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + disk="disk_value", + disks_resize_request_resource=compute.DisksResizeRequest(size_gb=739), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize( + compute.ResizeDiskRequest(), + project="project_value", + zone="zone_value", + disk="disk_value", + disks_resize_request_resource=compute.DisksResizeRequest(size_gb=739), + ) + + +def test_resize_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeDiskRequest, + dict, + ], +) +def test_resize_unary_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_resize_unary_rest_required_fields(request_type=compute.ResizeDiskRequest): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_unary_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "disksResizeRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_unary_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), + ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeDiskRequest +): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + request_init["disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 400 response_value.request = Request() @@ -3853,85 +5832,347 @@ def test_resize_unary_rest_bad_request( client.resize_unary(request) -def test_resize_unary_rest_flattened(): +def test_resize_unary_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + disk="disk_value", + disks_resize_request_resource=compute.DisksResizeRequest(size_gb=739), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_unary_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize_unary( + compute.ResizeDiskRequest(), + project="project_value", + zone="zone_value", + disk="disk_value", + disks_resize_request_resource=compute.DisksResizeRequest(size_gb=739), + ) + + +def test_resize_unary_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyDiskRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicyDiskRequest, +): + transport_class = transports.DisksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) + request = request_type(request_init) + # Designate an appropriate value for the returned response. + return_value = compute.Policy() # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation() + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2", "disk": "sample3"} + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # get truthy value for each flattened field - mock_args = dict( - project="project_value", - zone="zone_value", - disk="disk_value", - disks_resize_request_resource=compute.DisksResizeRequest(size_gb=739), - ) - mock_args.update(sample_request) + response = client.set_iam_policy(request) - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - client.resize_unary(**mock_args) +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.DisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{disk}/resize" - % client.transport._host, - args[1], + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "resource", + "zone", + "zoneSetPolicyRequestResource", + ) ) + ) -def test_resize_unary_rest_flattened_error(transport: str = "rest"): - client = DisksClient( +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + interceptor=None if null_interceptor else transports.DisksRestInterceptor(), ) + client = DisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.DisksRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.DisksRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.resize_unary( - compute.ResizeDiskRequest(), - project="project_value", - zone="zone_value", - disk="disk_value", - disks_resize_request_resource=compute.DisksResizeRequest(size_gb=739), - ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) -def test_resize_unary_rest_error(): - client = DisksClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + request = compute.SetIamPolicyDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) -@pytest.mark.parametrize( - "request_type", - [ - compute.SetIamPolicyDiskRequest, - dict, - ], -) -def test_set_iam_policy_rest(request_type): + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicyDiskRequest +): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # send a request that will satisfy transcoding @@ -4015,33 +6256,178 @@ def test_set_iam_policy_rest(request_type): } request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicyDiskRequest(), + project="project_value", + zone="zone_value", + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsDiskRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = DisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicyDiskRequest, -): +def test_set_labels_rest_required_fields(request_type=compute.SetLabelsDiskRequest): transport_class = transports.DisksRestTransport request_init = {} @@ -4059,7 +6445,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4070,7 +6456,9 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4088,7 +6476,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4107,38 +6495,38 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_set_labels_rest_unset_required_fields(): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "resource", "zone", - "zoneSetPolicyRequestResource", + "zoneSetLabelsRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.DisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.DisksRestInterceptor(), @@ -4149,9 +6537,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.DisksRestInterceptor, "post_set_iam_policy" + transports.DisksRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.DisksRestInterceptor, "pre_set_iam_policy" + transports.DisksRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4166,17 +6554,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicyDiskRequest() + request = compute.SetLabelsDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.set_labels( request, metadata=[ ("key", "val"), @@ -4188,8 +6576,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicyDiskRequest +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsDiskRequest ): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4198,82 +6586,9 @@ def test_set_iam_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init["zone_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, } request = request_type(request_init) @@ -4286,10 +6601,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.set_labels(request) -def test_set_iam_policy_rest_flattened(): +def test_set_labels_rest_flattened(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4298,7 +6613,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4312,8 +6627,8 @@ def test_set_iam_policy_rest_flattened(): project="project_value", zone="zone_value", resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + zone_set_labels_request_resource=compute.ZoneSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) mock_args.update(sample_request) @@ -4321,25 +6636,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.set_labels(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/disks/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/disks/{resource}/setLabels" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_set_labels_rest_flattened_error(transport: str = "rest"): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4348,18 +6663,18 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicyDiskRequest(), + client.set_labels( + compute.SetLabelsDiskRequest(), project="project_value", zone="zone_value", resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + zone_set_labels_request_resource=compute.ZoneSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) -def test_set_iam_policy_rest_error(): +def test_set_labels_rest_error(): client = DisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4424,28 +6739,6 @@ def test_set_labels_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_labels_unary_rest_required_fields( @@ -5072,6 +7365,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = DisksClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_disks_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -5115,6 +7421,14 @@ def test_disks_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_disks_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_external_vpn_gateways.py b/tests/unit/gapic/compute_v1/test_external_vpn_gateways.py index 472994300..15044bdb9 100644 --- a/tests/unit/gapic/compute_v1/test_external_vpn_gateways.py +++ b/tests/unit/gapic/compute_v1/test_external_vpn_gateways.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -555,7 +557,7 @@ def test_external_vpn_gateways_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -599,10 +601,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -627,7 +629,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteExternalVpnGatewayRequest, ): transport_class = transports.ExternalVpnGatewaysRestTransport @@ -696,14 +698,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -721,7 +723,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -761,7 +763,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -773,7 +775,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteExternalVpnGatewayRequest ): client = ExternalVpnGatewaysClient( @@ -794,10 +796,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -826,7 +828,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -839,7 +841,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -848,14 +850,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteExternalVpnGatewayRequest(), project="project_value", external_vpn_gateway="external_vpn_gateway_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -864,11 +866,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetExternalVpnGatewayRequest, + compute.DeleteExternalVpnGatewayRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -881,38 +883,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ExternalVpnGateway( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", name="name_value", - redundancy_type="redundancy_type_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExternalVpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.ExternalVpnGateway) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.name == "name_value" - assert response.redundancy_type == "redundancy_type_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetExternalVpnGatewayRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteExternalVpnGatewayRequest, +): transport_class = transports.ExternalVpnGatewaysRestTransport request_init = {} @@ -929,7 +939,7 @@ def test_get_rest_required_fields(request_type=compute.GetExternalVpnGatewayRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -939,7 +949,9 @@ def test_get_rest_required_fields(request_type=compute.GetExternalVpnGatewayRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -955,7 +967,7 @@ def test_get_rest_required_fields(request_type=compute.GetExternalVpnGatewayRequ request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ExternalVpnGateway() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -966,32 +978,32 @@ def test_get_rest_required_fields(request_type=compute.GetExternalVpnGatewayRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExternalVpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "externalVpnGateway", @@ -1002,7 +1014,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1015,9 +1027,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ExternalVpnGatewaysRestInterceptor, "post_get" + transports.ExternalVpnGatewaysRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.ExternalVpnGatewaysRestInterceptor, "pre_get" + transports.ExternalVpnGatewaysRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1032,19 +1044,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ExternalVpnGateway.to_json( - compute.ExternalVpnGateway() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetExternalVpnGatewayRequest() + request = compute.DeleteExternalVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ExternalVpnGateway + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1056,8 +1066,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetExternalVpnGatewayRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteExternalVpnGatewayRequest ): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1077,10 +1087,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1089,7 +1099,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ExternalVpnGateway() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "external_vpn_gateway": "sample2"} @@ -1104,12 +1114,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExternalVpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1122,7 +1132,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1131,14 +1141,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetExternalVpnGatewayRequest(), + client.delete_unary( + compute.DeleteExternalVpnGatewayRequest(), project="project_value", external_vpn_gateway="external_vpn_gateway_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1147,100 +1157,59 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertExternalVpnGatewayRequest, + compute.GetExternalVpnGatewayRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["external_vpn_gateway_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "interfaces": [{"id": 205, "ip_address": "ip_address_value"}], - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "name": "name_value", - "redundancy_type": "redundancy_type_value", - "self_link": "self_link_value", - } + request_init = {"project": "sample1", "external_vpn_gateway": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.ExternalVpnGateway( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, id=205, - insert_time="insert_time_value", kind="kind_value", + label_fingerprint="label_fingerprint_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + redundancy_type="redundancy_type_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ExternalVpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.ExternalVpnGateway) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.redundancy_type == "redundancy_type_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertExternalVpnGatewayRequest, -): +def test_get_rest_required_fields(request_type=compute.GetExternalVpnGatewayRequest): transport_class = transports.ExternalVpnGatewaysRestTransport request_init = {} + request_init["external_vpn_gateway"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1253,21 +1222,22 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["externalVpnGateway"] = "external_vpn_gateway_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "externalVpnGateway" in jsonified_request + assert jsonified_request["externalVpnGateway"] == "external_vpn_gateway_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1278,7 +1248,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.ExternalVpnGateway() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1289,36 +1259,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ExternalVpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "externalVpnGatewayResource", + "externalVpnGateway", "project", ) ) @@ -1326,7 +1295,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1339,9 +1308,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ExternalVpnGatewaysRestInterceptor, "post_insert" + transports.ExternalVpnGatewaysRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.ExternalVpnGatewaysRestInterceptor, "pre_insert" + transports.ExternalVpnGatewaysRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1356,17 +1325,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.ExternalVpnGateway.to_json( + compute.ExternalVpnGateway() + ) - request = compute.InsertExternalVpnGatewayRequest() + request = compute.GetExternalVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.ExternalVpnGateway - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1378,8 +1349,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertExternalVpnGatewayRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetExternalVpnGatewayRequest ): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1387,19 +1358,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["external_vpn_gateway_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "interfaces": [{"id": 205, "ip_address": "ip_address_value"}], - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "name": "name_value", - "redundancy_type": "redundancy_type_value", - "self_link": "self_link_value", - } + request_init = {"project": "sample1", "external_vpn_gateway": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1411,10 +1370,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1423,24 +1382,674 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.ExternalVpnGateway() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "external_vpn_gateway": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - external_vpn_gateway_resource=compute.ExternalVpnGateway( - creation_timestamp="creation_timestamp_value" - ), + external_vpn_gateway="external_vpn_gateway_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ExternalVpnGateway.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/externalVpnGateways/{external_vpn_gateway}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetExternalVpnGatewayRequest(), + project="project_value", + external_vpn_gateway="external_vpn_gateway_value", + ) + + +def test_get_rest_error(): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertExternalVpnGatewayRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["external_vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "interfaces": [{"id": 205, "ip_address": "ip_address_value"}], + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "redundancy_type": "redundancy_type_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertExternalVpnGatewayRequest, +): + transport_class = transports.ExternalVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.ExternalVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "externalVpnGatewayResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.ExternalVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ExternalVpnGatewaysRestInterceptor(), + ) + client = ExternalVpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ExternalVpnGatewaysRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ExternalVpnGatewaysRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertExternalVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertExternalVpnGatewayRequest +): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["external_vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "interfaces": [{"id": 205, "ip_address": "ip_address_value"}], + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "redundancy_type": "redundancy_type_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + external_vpn_gateway_resource=compute.ExternalVpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/externalVpnGateways" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertExternalVpnGatewayRequest(), + project="project_value", + external_vpn_gateway_resource=compute.ExternalVpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertExternalVpnGatewayRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["external_vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "interfaces": [{"id": 205, "ip_address": "ip_address_value"}], + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "redundancy_type": "redundancy_type_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertExternalVpnGatewayRequest, +): + transport_class = transports.ExternalVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.ExternalVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "externalVpnGatewayResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.ExternalVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ExternalVpnGatewaysRestInterceptor(), + ) + client = ExternalVpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ExternalVpnGatewaysRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ExternalVpnGatewaysRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertExternalVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertExternalVpnGatewayRequest +): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["external_vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "interfaces": [{"id": 205, "ip_address": "ip_address_value"}], + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "redundancy_type": "redundancy_type_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + external_vpn_gateway_resource=compute.ExternalVpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1458,7 +2067,294 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertExternalVpnGatewayRequest(), + project="project_value", + external_vpn_gateway_resource=compute.ExternalVpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListExternalVpnGatewaysRequest, + dict, + ], +) +def test_list_rest(request_type): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ExternalVpnGatewayList( + etag="etag_value", + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ExternalVpnGatewayList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.etag == "etag_value" + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListExternalVpnGatewaysRequest): + transport_class = transports.ExternalVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ExternalVpnGatewayList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ExternalVpnGatewayList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.ExternalVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.ExternalVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ExternalVpnGatewaysRestInterceptor(), + ) + client = ExternalVpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ExternalVpnGatewaysRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.ExternalVpnGatewaysRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ExternalVpnGatewayList.to_json( + compute.ExternalVpnGatewayList() + ) + + request = compute.ListExternalVpnGatewaysRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ExternalVpnGatewayList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListExternalVpnGatewaysRequest +): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ExternalVpnGatewayList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ExternalVpnGatewayList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/externalVpnGateways" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1467,71 +2363,164 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertExternalVpnGatewayRequest(), + client.list( + compute.ListExternalVpnGatewaysRequest(), project="project_value", - external_vpn_gateway_resource=compute.ExternalVpnGateway( - creation_timestamp="creation_timestamp_value" + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = ExternalVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ExternalVpnGatewayList( + items=[ + compute.ExternalVpnGateway(), + compute.ExternalVpnGateway(), + compute.ExternalVpnGateway(), + ], + next_page_token="abc", + ), + compute.ExternalVpnGatewayList( + items=[], + next_page_token="def", + ), + compute.ExternalVpnGatewayList( + items=[ + compute.ExternalVpnGateway(), + ], + next_page_token="ghi", + ), + compute.ExternalVpnGatewayList( + items=[ + compute.ExternalVpnGateway(), + compute.ExternalVpnGateway(), + ], ), ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ExternalVpnGatewayList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + pager = client.list(request=sample_request) -def test_insert_unary_rest_error(): - client = ExternalVpnGatewaysClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ExternalVpnGateway) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - compute.ListExternalVpnGatewaysRequest, + compute.SetLabelsExternalVpnGatewayRequest, dict, ], ) -def test_list_rest(request_type): +def test_set_labels_rest(request_type): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ExternalVpnGatewayList( - etag="etag_value", - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExternalVpnGatewayList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_labels(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.etag == "etag_value" - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListExternalVpnGatewaysRequest): +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsExternalVpnGatewayRequest, +): transport_class = transports.ExternalVpnGatewaysRestTransport request_init = {} request_init["project"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1543,31 +2532,24 @@ def test_list_rest_required_fields(request_type=compute.ListExternalVpnGatewaysR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1576,7 +2558,7 @@ def test_list_rest_required_fields(request_type=compute.ListExternalVpnGatewaysR request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ExternalVpnGatewayList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1587,46 +2569,45 @@ def test_list_rest_required_fields(request_type=compute.ListExternalVpnGatewaysR # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExternalVpnGatewayList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_labels(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_labels_rest_unset_required_fields(): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(()) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "globalSetLabelsRequestResource", + "project", + "resource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.ExternalVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1639,9 +2620,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ExternalVpnGatewaysRestInterceptor, "post_list" + transports.ExternalVpnGatewaysRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.ExternalVpnGatewaysRestInterceptor, "pre_list" + transports.ExternalVpnGatewaysRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1656,19 +2637,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ExternalVpnGatewayList.to_json( - compute.ExternalVpnGatewayList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListExternalVpnGatewaysRequest() + request = compute.SetLabelsExternalVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ExternalVpnGatewayList + post.return_value = compute.Operation - client.list( + client.set_labels( request, metadata=[ ("key", "val"), @@ -1680,8 +2659,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListExternalVpnGatewaysRequest +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsExternalVpnGatewayRequest ): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1689,7 +2668,11 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1701,10 +2684,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_labels(request) -def test_list_rest_flattened(): +def test_set_labels_rest_flattened(): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1713,39 +2696,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ExternalVpnGatewayList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "resource": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExternalVpnGatewayList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_labels(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/externalVpnGateways" + "%s/compute/v1/projects/{project}/global/externalVpnGateways/{resource}/setLabels" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_labels_rest_flattened_error(transport: str = "rest"): client = ExternalVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1754,72 +2741,21 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListExternalVpnGatewaysRequest(), + client.set_labels( + compute.SetLabelsExternalVpnGatewayRequest(), project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_labels_rest_error(): client = ExternalVpnGatewaysClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ExternalVpnGatewayList( - items=[ - compute.ExternalVpnGateway(), - compute.ExternalVpnGateway(), - compute.ExternalVpnGateway(), - ], - next_page_token="abc", - ), - compute.ExternalVpnGatewayList( - items=[], - next_page_token="def", - ), - compute.ExternalVpnGatewayList( - items=[ - compute.ExternalVpnGateway(), - ], - next_page_token="ghi", - ), - compute.ExternalVpnGatewayList( - items=[ - compute.ExternalVpnGateway(), - compute.ExternalVpnGateway(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ExternalVpnGatewayList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ExternalVpnGateway) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -1880,28 +2816,6 @@ def test_set_labels_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_labels_unary_rest_required_fields( @@ -2509,6 +3423,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ExternalVpnGatewaysClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_external_vpn_gateways_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2545,6 +3472,14 @@ def test_external_vpn_gateways_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_external_vpn_gateways_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_firewall_policies.py b/tests/unit/gapic/compute_v1/test_firewall_policies.py index f55b5e7ef..82fa01db5 100644 --- a/tests/unit/gapic/compute_v1/test_firewall_policies.py +++ b/tests/unit/gapic/compute_v1/test_firewall_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_firewall_policies_client_client_options_credentials_file( dict, ], ) -def test_add_association_unary_rest(request_type): +def test_add_association_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -596,10 +598,10 @@ def test_add_association_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_association_unary(request) + response = client.add_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -624,7 +626,7 @@ def test_add_association_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_association_unary_rest_required_fields( +def test_add_association_rest_required_fields( request_type=compute.AddAssociationFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -695,14 +697,14 @@ def test_add_association_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_association_unary(request) + response = client.add_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_association_unary_rest_unset_required_fields(): +def test_add_association_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -725,7 +727,7 @@ def test_add_association_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_association_unary_rest_interceptors(null_interceptor): +def test_add_association_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -765,7 +767,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_association_unary( + client.add_association( request, metadata=[ ("key", "val"), @@ -777,7 +779,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_association_unary_rest_bad_request( +def test_add_association_rest_bad_request( transport: str = "rest", request_type=compute.AddAssociationFirewallPolicyRequest ): client = FirewallPoliciesClient( @@ -805,10 +807,10 @@ def test_add_association_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_association_unary(request) + client.add_association(request) -def test_add_association_unary_rest_flattened(): +def test_add_association_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -839,7 +841,7 @@ def test_add_association_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_association_unary(**mock_args) + client.add_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -852,7 +854,7 @@ def test_add_association_unary_rest_flattened(): ) -def test_add_association_unary_rest_flattened_error(transport: str = "rest"): +def test_add_association_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -861,7 +863,7 @@ def test_add_association_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_association_unary( + client.add_association( compute.AddAssociationFirewallPolicyRequest(), firewall_policy="firewall_policy_value", firewall_policy_association_resource=compute.FirewallPolicyAssociation( @@ -870,7 +872,7 @@ def test_add_association_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_association_unary_rest_error(): +def test_add_association_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -879,11 +881,11 @@ def test_add_association_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AddRuleFirewallPolicyRequest, + compute.AddAssociationFirewallPolicyRequest, dict, ], ) -def test_add_rule_unary_rest(request_type): +def test_add_association_unary_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -891,33 +893,12 @@ def test_add_rule_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], + request_init["firewall_policy_association_resource"] = { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", } request = request_type(request_init) @@ -955,36 +936,14 @@ def test_add_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_association_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_add_rule_unary_rest_required_fields( - request_type=compute.AddRuleFirewallPolicyRequest, +def test_add_association_unary_rest_required_fields( + request_type=compute.AddAssociationFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -1001,7 +960,7 @@ def test_add_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_rule._get_unset_required_fields(jsonified_request) + ).add_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1010,9 +969,14 @@ def test_add_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_rule._get_unset_required_fields(jsonified_request) + ).add_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "replace_existing_association", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1049,32 +1013,37 @@ def test_add_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_association_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_rule_unary_rest_unset_required_fields(): +def test_add_association_unary_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.add_rule._get_unset_required_fields({}) + unset_fields = transport.add_association._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "replaceExistingAssociation", + "requestId", + ) + ) & set( ( "firewallPolicy", - "firewallPolicyRuleResource", + "firewallPolicyAssociationResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_rule_unary_rest_interceptors(null_interceptor): +def test_add_association_unary_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1087,9 +1056,9 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_add_rule" + transports.FirewallPoliciesRestInterceptor, "post_add_association" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_add_rule" + transports.FirewallPoliciesRestInterceptor, "pre_add_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1106,7 +1075,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AddRuleFirewallPolicyRequest() + request = compute.AddAssociationFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1114,7 +1083,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_rule_unary( + client.add_association_unary( request, metadata=[ ("key", "val"), @@ -1126,8 +1095,8 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_rule_unary_rest_bad_request( - transport: str = "rest", request_type=compute.AddRuleFirewallPolicyRequest +def test_add_association_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddAssociationFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1136,33 +1105,12 @@ def test_add_rule_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], + request_init["firewall_policy_association_resource"] = { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", } request = request_type(request_init) @@ -1175,10 +1123,10 @@ def test_add_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_rule_unary(request) + client.add_association_unary(request) -def test_add_rule_unary_rest_flattened(): +def test_add_association_unary_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1195,8 +1143,8 @@ def test_add_rule_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" + firewall_policy_association_resource=compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" ), ) mock_args.update(sample_request) @@ -1209,20 +1157,20 @@ def test_add_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_rule_unary(**mock_args) + client.add_association_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/addRule" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/addAssociation" % client.transport._host, args[1], ) -def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_add_association_unary_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1231,16 +1179,16 @@ def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_rule_unary( - compute.AddRuleFirewallPolicyRequest(), + client.add_association_unary( + compute.AddAssociationFirewallPolicyRequest(), firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" + firewall_policy_association_resource=compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" ), ) -def test_add_rule_unary_rest_error(): +def test_add_association_unary_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1249,11 +1197,11 @@ def test_add_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.CloneRulesFirewallPolicyRequest, + compute.AddRuleFirewallPolicyRequest, dict, ], ) -def test_clone_rules_unary_rest(request_type): +def test_add_rule_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1261,6 +1209,34 @@ def test_clone_rules_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1297,10 +1273,10 @@ def test_clone_rules_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.clone_rules_unary(request) + response = client.add_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1325,8 +1301,8 @@ def test_clone_rules_unary_rest(request_type): assert response.zone == "zone_value" -def test_clone_rules_unary_rest_required_fields( - request_type=compute.CloneRulesFirewallPolicyRequest, +def test_add_rule_rest_required_fields( + request_type=compute.AddRuleFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -1343,7 +1319,7 @@ def test_clone_rules_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).clone_rules._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1352,14 +1328,9 @@ def test_clone_rules_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).clone_rules._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "source_firewall_policy", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1387,6 +1358,7 @@ def test_clone_rules_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1395,32 +1367,32 @@ def test_clone_rules_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.clone_rules_unary(request) + response = client.add_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_clone_rules_unary_rest_unset_required_fields(): +def test_add_rule_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.clone_rules._get_unset_required_fields({}) + unset_fields = transport.add_rule._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "requestId", - "sourceFirewallPolicy", + "firewallPolicy", + "firewallPolicyRuleResource", ) ) - & set(("firewallPolicy",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_clone_rules_unary_rest_interceptors(null_interceptor): +def test_add_rule_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1433,9 +1405,9 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_clone_rules" + transports.FirewallPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_clone_rules" + transports.FirewallPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1452,7 +1424,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.CloneRulesFirewallPolicyRequest() + request = compute.AddRuleFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1460,7 +1432,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.clone_rules_unary( + client.add_rule( request, metadata=[ ("key", "val"), @@ -1472,8 +1444,8 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_clone_rules_unary_rest_bad_request( - transport: str = "rest", request_type=compute.CloneRulesFirewallPolicyRequest +def test_add_rule_rest_bad_request( + transport: str = "rest", request_type=compute.AddRuleFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1482,21 +1454,49 @@ def test_clone_rules_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.clone_rules_unary(request) + client.add_rule(request) -def test_clone_rules_unary_rest_flattened(): +def test_add_rule_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1513,6 +1513,9 @@ def test_clone_rules_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -1524,20 +1527,20 @@ def test_clone_rules_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.clone_rules_unary(**mock_args) + client.add_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/cloneRules" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/addRule" % client.transport._host, args[1], ) -def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1546,13 +1549,16 @@ def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.clone_rules_unary( - compute.CloneRulesFirewallPolicyRequest(), + client.add_rule( + compute.AddRuleFirewallPolicyRequest(), firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_clone_rules_unary_rest_error(): +def test_add_rule_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1561,11 +1567,11 @@ def test_clone_rules_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteFirewallPolicyRequest, + compute.AddRuleFirewallPolicyRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_add_rule_unary_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1573,6 +1579,34 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1609,36 +1643,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_rule_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteFirewallPolicyRequest, +def test_add_rule_unary_rest_required_fields( + request_type=compute.AddRuleFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -1655,7 +1667,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1664,7 +1676,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1691,9 +1703,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1702,24 +1715,32 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_rule_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_add_rule_unary_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) - assert set(unset_fields) == (set(("requestId",)) & set(("firewallPolicy",))) + unset_fields = transport.add_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_add_rule_unary_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1732,9 +1753,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_delete" + transports.FirewallPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_delete" + transports.FirewallPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1751,7 +1772,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteFirewallPolicyRequest() + request = compute.AddRuleFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1759,7 +1780,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.add_rule_unary( request, metadata=[ ("key", "val"), @@ -1771,8 +1792,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteFirewallPolicyRequest +def test_add_rule_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddRuleFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1781,6 +1802,34 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1792,10 +1841,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.add_rule_unary(request) -def test_delete_unary_rest_flattened(): +def test_add_rule_unary_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1812,6 +1861,9 @@ def test_delete_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -1823,20 +1875,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.add_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/addRule" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1845,13 +1897,16 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteFirewallPolicyRequest(), + client.add_rule_unary( + compute.AddRuleFirewallPolicyRequest(), firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_delete_unary_rest_error(): +def test_add_rule_unary_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1860,11 +1915,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetFirewallPolicyRequest, + compute.CloneRulesFirewallPolicyRequest, dict, ], ) -def test_get_rest(request_type): +def test_clone_rules_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1877,48 +1932,68 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - display_name="display_name_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - parent="parent_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - rule_tuple_count=1737, self_link="self_link_value", - self_link_with_id="self_link_with_id_value", - short_name="short_name_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.clone_rules(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicy) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.display_name == "display_name_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.parent == "parent_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" - assert response.rule_tuple_count == 1737 assert response.self_link == "self_link_value" - assert response.self_link_with_id == "self_link_with_id_value" - assert response.short_name == "short_name_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetFirewallPolicyRequest): +def test_clone_rules_rest_required_fields( + request_type=compute.CloneRulesFirewallPolicyRequest, +): transport_class = transports.FirewallPoliciesRestTransport request_init = {} @@ -1934,7 +2009,7 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallPolicyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1943,7 +2018,14 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallPolicyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_firewall_policy", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1957,7 +2039,7 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallPolicyRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1968,35 +2050,43 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallPolicyRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.clone_rules(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_clone_rules_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("firewallPolicy",))) + unset_fields = transport.clone_rules._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceFirewallPolicy", + ) + ) + & set(("firewallPolicy",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_clone_rules_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2009,9 +2099,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_get" + transports.FirewallPoliciesRestInterceptor, "post_clone_rules" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_get" + transports.FirewallPoliciesRestInterceptor, "pre_clone_rules" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2026,19 +2116,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicy.to_json( - compute.FirewallPolicy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetFirewallPolicyRequest() + request = compute.CloneRulesFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicy + post.return_value = compute.Operation - client.get( + client.clone_rules( request, metadata=[ ("key", "val"), @@ -2050,8 +2138,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetFirewallPolicyRequest +def test_clone_rules_rest_bad_request( + transport: str = "rest", request_type=compute.CloneRulesFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2071,10 +2159,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.clone_rules(request) -def test_get_rest_flattened(): +def test_clone_rules_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2083,7 +2171,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"firewall_policy": "sample1"} @@ -2097,25 +2185,25 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.clone_rules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/cloneRules" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_clone_rules_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2124,13 +2212,13 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetFirewallPolicyRequest(), + client.clone_rules( + compute.CloneRulesFirewallPolicyRequest(), firewall_policy="firewall_policy_value", ) -def test_get_rest_error(): +def test_clone_rules_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2139,11 +2227,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetAssociationFirewallPolicyRequest, + compute.CloneRulesFirewallPolicyRequest, dict, ], ) -def test_get_association_rest(request_type): +def test_clone_rules_unary_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2156,33 +2244,45 @@ def test_get_association_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value", - display_name="display_name_value", - firewall_policy_id="firewall_policy_id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", name="name_value", - short_name="short_name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_association(request) + response = client.clone_rules_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicyAssociation) - assert response.attachment_target == "attachment_target_value" - assert response.display_name == "display_name_value" - assert response.firewall_policy_id == "firewall_policy_id_value" - assert response.name == "name_value" - assert response.short_name == "short_name_value" + assert isinstance(response, compute.Operation) -def test_get_association_rest_required_fields( - request_type=compute.GetAssociationFirewallPolicyRequest, +def test_clone_rules_unary_rest_required_fields( + request_type=compute.CloneRulesFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -2199,7 +2299,7 @@ def test_get_association_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_association._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2208,9 +2308,14 @@ def test_get_association_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_association._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("name",)) + assert not set(unset_fields) - set( + ( + "request_id", + "source_firewall_policy", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2224,7 +2329,7 @@ def test_get_association_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2235,35 +2340,43 @@ def test_get_association_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_association(request) + response = client.clone_rules_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_association_rest_unset_required_fields(): +def test_clone_rules_unary_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_association._get_unset_required_fields({}) - assert set(unset_fields) == (set(("name",)) & set(("firewallPolicy",))) + unset_fields = transport.clone_rules._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceFirewallPolicy", + ) + ) + & set(("firewallPolicy",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_association_rest_interceptors(null_interceptor): +def test_clone_rules_unary_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2276,9 +2389,9 @@ def test_get_association_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_get_association" + transports.FirewallPoliciesRestInterceptor, "post_clone_rules" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_get_association" + transports.FirewallPoliciesRestInterceptor, "pre_clone_rules" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2293,19 +2406,17 @@ def test_get_association_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyAssociation.to_json( - compute.FirewallPolicyAssociation() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetAssociationFirewallPolicyRequest() + request = compute.CloneRulesFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyAssociation + post.return_value = compute.Operation - client.get_association( + client.clone_rules_unary( request, metadata=[ ("key", "val"), @@ -2317,8 +2428,8 @@ def test_get_association_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_association_rest_bad_request( - transport: str = "rest", request_type=compute.GetAssociationFirewallPolicyRequest +def test_clone_rules_unary_rest_bad_request( + transport: str = "rest", request_type=compute.CloneRulesFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2338,10 +2449,10 @@ def test_get_association_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_association(request) + client.clone_rules_unary(request) -def test_get_association_rest_flattened(): +def test_clone_rules_unary_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2350,7 +2461,7 @@ def test_get_association_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"firewall_policy": "sample1"} @@ -2364,25 +2475,25 @@ def test_get_association_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_association(**mock_args) + client.clone_rules_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/getAssociation" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/cloneRules" % client.transport._host, args[1], ) -def test_get_association_rest_flattened_error(transport: str = "rest"): +def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2391,13 +2502,13 @@ def test_get_association_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_association( - compute.GetAssociationFirewallPolicyRequest(), + client.clone_rules_unary( + compute.CloneRulesFirewallPolicyRequest(), firewall_policy="firewall_policy_value", ) -def test_get_association_rest_error(): +def test_clone_rules_unary_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2406,51 +2517,87 @@ def test_get_association_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyFirewallPolicyRequest, + compute.DeleteFirewallPolicyRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"resource": "sample1"} + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyFirewallPolicyRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteFirewallPolicyRequest): transport_class = transports.FirewallPoliciesRestTransport request_init = {} - request_init["resource"] = "" + request_init["firewall_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2462,23 +2609,23 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["resource"] = "resource_value" + jsonified_request["firewallPolicy"] = "firewall_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2487,7 +2634,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2498,37 +2645,35 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) & set(("resource",)) - ) + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == (set(("requestId",)) & set(("firewallPolicy",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2541,9 +2686,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_get_iam_policy" + transports.FirewallPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_get_iam_policy" + transports.FirewallPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2558,17 +2703,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyFirewallPolicyRequest() + request = compute.DeleteFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete( request, metadata=[ ("key", "val"), @@ -2580,8 +2725,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyFirewallPolicyRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2589,7 +2734,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"resource": "sample1"} + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2601,10 +2746,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2613,39 +2758,39 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"resource": "sample1"} + sample_request = {"firewall_policy": "sample1"} # get truthy value for each flattened field mock_args = dict( - resource="resource_value", + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{resource}/getIamPolicy" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2654,13 +2799,13 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyFirewallPolicyRequest(), - resource="resource_value", + client.delete( + compute.DeleteFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", ) -def test_get_iam_policy_rest_error(): +def test_delete_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2669,11 +2814,11 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRuleFirewallPolicyRequest, + compute.DeleteFirewallPolicyRequest, dict, ], ) -def test_get_rule_rest(request_type): +def test_delete_unary_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2686,45 +2831,45 @@ def test_get_rule_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule( - action="action_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", description="description_value", - direction="direction_value", - disabled=True, - enable_logging=True, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - priority=898, - rule_name="rule_name_value", - rule_tuple_count=1737, - target_resources=["target_resources_value"], - target_service_accounts=["target_service_accounts_value"], + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicyRule) - assert response.action == "action_value" - assert response.description == "description_value" - assert response.direction == "direction_value" - assert response.disabled is True - assert response.enable_logging is True - assert response.kind == "kind_value" - assert response.priority == 898 - assert response.rule_name == "rule_name_value" - assert response.rule_tuple_count == 1737 - assert response.target_resources == ["target_resources_value"] - assert response.target_service_accounts == ["target_service_accounts_value"] + assert isinstance(response, compute.Operation) -def test_get_rule_rest_required_fields( - request_type=compute.GetRuleFirewallPolicyRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -2741,7 +2886,7 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2750,9 +2895,9 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("priority",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2766,7 +2911,7 @@ def test_get_rule_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2777,35 +2922,35 @@ def test_get_rule_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rule_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_rule._get_unset_required_fields({}) - assert set(unset_fields) == (set(("priority",)) & set(("firewallPolicy",))) + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == (set(("requestId",)) & set(("firewallPolicy",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rule_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2818,9 +2963,9 @@ def test_get_rule_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_get_rule" + transports.FirewallPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_get_rule" + transports.FirewallPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2835,19 +2980,17 @@ def test_get_rule_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyRule.to_json( - compute.FirewallPolicyRule() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRuleFirewallPolicyRequest() + request = compute.DeleteFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyRule + post.return_value = compute.Operation - client.get_rule( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2859,8 +3002,8 @@ def test_get_rule_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rule_rest_bad_request( - transport: str = "rest", request_type=compute.GetRuleFirewallPolicyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2880,10 +3023,10 @@ def test_get_rule_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_rule(request) + client.delete_unary(request) -def test_get_rule_rest_flattened(): +def test_delete_unary_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2892,7 +3035,7 @@ def test_get_rule_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"firewall_policy": "sample1"} @@ -2906,25 +3049,25 @@ def test_get_rule_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_rule(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/getRule" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_rule_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2933,13 +3076,13 @@ def test_get_rule_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_rule( - compute.GetRuleFirewallPolicyRequest(), + client.delete_unary( + compute.DeleteFirewallPolicyRequest(), firewall_policy="firewall_policy_value", ) -def test_get_rule_rest_error(): +def test_delete_unary_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2948,148 +3091,69 @@ def test_get_rule_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertFirewallPolicyRequest, + compute.GetFirewallPolicyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.FirewallPolicy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + display_name="display_name_value", + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + parent="parent_value", region="region_value", + rule_tuple_count=1737, self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + self_link_with_id="self_link_with_id_value", + short_name="short_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.FirewallPolicy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.display_name == "display_name_value" + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.parent == "parent_value" assert response.region == "region_value" + assert response.rule_tuple_count == 1737 assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.self_link_with_id == "self_link_with_id_value" + assert response.short_name == "short_name_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertFirewallPolicyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetFirewallPolicyRequest): transport_class = transports.FirewallPoliciesRestTransport request_init = {} + request_init["firewall_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -3101,24 +3165,21 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewallPolicy"] = "firewall_policy_value" + unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "parent_id", - "request_id", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3127,7 +3188,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.FirewallPolicy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3138,44 +3199,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) - assert set(unset_fields) == ( - set( - ( - "parentId", - "requestId", - ) - ) - & set(("firewallPolicyResource",)) - ) + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("firewallPolicy",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3188,9 +3240,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_insert" + transports.FirewallPoliciesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_insert" + transports.FirewallPoliciesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3205,17 +3257,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.FirewallPolicy.to_json( + compute.FirewallPolicy() + ) - request = compute.InsertFirewallPolicyRequest() + request = compute.GetFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.FirewallPolicy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -3227,8 +3281,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertFirewallPolicyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3236,67 +3290,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3308,10 +3302,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3320,45 +3314,39 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.FirewallPolicy() # get arguments that satisfy an http rule for this method - sample_request = {} + sample_request = {"firewall_policy": "sample1"} # get truthy value for each flattened field mock_args = dict( - parent_id="parent_id_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies" % client.transport._host, + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" + % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3367,20 +3355,13 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertFirewallPolicyRequest(), - parent_id="parent_id_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), + client.get( + compute.GetFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3389,68 +3370,153 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListFirewallPoliciesRequest, + compute.GetAssociationFirewallPolicyRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_association_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {} + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", + return_value = compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value", + display_name="display_name_value", + firewall_policy_id="firewall_policy_id_value", + name="name_value", + short_name="short_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, compute.FirewallPolicyAssociation) + assert response.attachment_target == "attachment_target_value" + assert response.display_name == "display_name_value" + assert response.firewall_policy_id == "firewall_policy_id_value" + assert response.name == "name_value" + assert response.short_name == "short_name_value" -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): - transport = transports.FirewallPoliciesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.FirewallPoliciesRestInterceptor(), +def test_get_association_rest_required_fields( + request_type=compute.GetAssociationFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) ) - client = FirewallPoliciesClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_list" - ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_list" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - transcode.return_value = { - "method": "post", - "uri": "my_uri", + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_association._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_association._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("name",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyAssociation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_association(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_association_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_association._get_unset_required_fields({}) + assert set(unset_fields) == (set(("name",)) & set(("firewallPolicy",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_association_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_get_association" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_get_association" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", "body": None, "query_params": {}, } @@ -3458,19 +3524,19 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyList.to_json( - compute.FirewallPolicyList() + req.return_value._content = compute.FirewallPolicyAssociation.to_json( + compute.FirewallPolicyAssociation() ) - request = compute.ListFirewallPoliciesRequest() + request = compute.GetAssociationFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyList + post.return_value = compute.FirewallPolicyAssociation - client.list( + client.get_association( request, metadata=[ ("key", "val"), @@ -3482,8 +3548,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListFirewallPoliciesRequest +def test_get_association_rest_bad_request( + transport: str = "rest", request_type=compute.GetAssociationFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3491,7 +3557,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {} + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3503,111 +3569,3521 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get_association(request) -def test_list_rest_pager(transport: str = "rest"): +def test_get_association_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyAssociation() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_association(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/getAssociation" + % client.transport._host, + args[1], + ) + + +def test_get_association_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_association( + compute.GetAssociationFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + ) + + +def test_get_association_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyFirewallPolicyRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"resource": "sample1"} + request = request_type(request_init) + # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - compute.FirewallPolicy(), - compute.FirewallPolicy(), - ], - next_page_token="abc", - ), - compute.FirewallPolicyList( - items=[], - next_page_token="def", - ), - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - ], - next_page_token="ghi", - ), - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - compute.FirewallPolicy(), - ], - ), + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) - # Two responses for two calls - response = response + response - # Wrap the values into proper Response objs - response = tuple(compute.FirewallPolicyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) - sample_request = {} + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 - pager = client.list(request=sample_request) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.FirewallPolicy) for i in results) +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token + request_init = {} + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) & set(("resource",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"resource": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {"resource": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyFirewallPolicyRequest(), + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRuleFirewallPolicyRequest, + dict, + ], +) +def test_get_rule_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule( + action="action_value", + description="description_value", + direction="direction_value", + disabled=True, + enable_logging=True, + kind="kind_value", + priority=898, + rule_name="rule_name_value", + rule_tuple_count=1737, + target_resources=["target_resources_value"], + target_service_accounts=["target_service_accounts_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.FirewallPolicyRule) + assert response.action == "action_value" + assert response.description == "description_value" + assert response.direction == "direction_value" + assert response.disabled is True + assert response.enable_logging is True + assert response.kind == "kind_value" + assert response.priority == 898 + assert response.rule_name == "rule_name_value" + assert response.rule_tuple_count == 1737 + assert response.target_resources == ["target_resources_value"] + assert response.target_service_accounts == ["target_service_accounts_value"] + + +def test_get_rule_rest_required_fields( + request_type=compute.GetRuleFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("priority",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rule_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_rule._get_unset_required_fields({}) + assert set(unset_fields) == (set(("priority",)) & set(("firewallPolicy",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rule_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_get_rule" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_get_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyRule.to_json( + compute.FirewallPolicyRule() + ) + + request = compute.GetRuleFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyRule + + client.get_rule( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rule_rest_bad_request( + transport: str = "rest", request_type=compute.GetRuleFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_rule(request) + + +def test_get_rule_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_rule(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/getRule" + % client.transport._host, + args[1], + ) + + +def test_get_rule_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_rule( + compute.GetRuleFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + ) + + +def test_get_rule_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertFirewallPolicyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertFirewallPolicyRequest): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["parent_id"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "parentId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == request_init["parent_id"] + + jsonified_request["parentId"] = "parent_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "parent_id", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == "parent_id_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [ + ( + "parentId", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "parentId", + "requestId", + ) + ) + & set( + ( + "firewallPolicyResource", + "parentId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {} + + # get truthy value for each flattened field + mock_args = dict( + parent_id="parent_id_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies" % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertFirewallPolicyRequest(), + parent_id="parent_id_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_insert_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertFirewallPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["parent_id"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "parentId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == request_init["parent_id"] + + jsonified_request["parentId"] = "parent_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "parent_id", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == "parent_id_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [ + ( + "parentId", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "parentId", + "requestId", + ) + ) + & set( + ( + "firewallPolicyResource", + "parentId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {} + + # get truthy value for each flattened field + mock_args = dict( + parent_id="parent_id_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies" % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertFirewallPolicyRequest(), + parent_id="parent_id_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_insert_unary_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListFirewallPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyList.to_json( + compute.FirewallPolicyList() + ) + + request = compute.ListFirewallPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListFirewallPoliciesRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_pager(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + compute.FirewallPolicy(), + compute.FirewallPolicy(), + ], + next_page_token="abc", + ), + compute.FirewallPolicyList( + items=[], + next_page_token="def", + ), + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + ], + next_page_token="ghi", + ), + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + compute.FirewallPolicy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.FirewallPolicyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.FirewallPolicy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListAssociationsFirewallPolicyRequest, + dict, + ], +) +def test_list_associations_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPoliciesListAssociationsResponse( + kind="kind_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPoliciesListAssociationsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_associations(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.FirewallPoliciesListAssociationsResponse) + assert response.kind == "kind_value" + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_associations_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_list_associations" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_list_associations" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.FirewallPoliciesListAssociationsResponse.to_json( + compute.FirewallPoliciesListAssociationsResponse() + ) + ) + + request = compute.ListAssociationsFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPoliciesListAssociationsResponse + + client.list_associations( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_associations_rest_bad_request( + transport: str = "rest", request_type=compute.ListAssociationsFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_associations(request) + + +def test_list_associations_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.MoveFirewallPolicyRequest, + dict, + ], +) +def test_move_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.move(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_move_rest_required_fields(request_type=compute.MoveFirewallPolicyRequest): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["parent_id"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "parentId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == request_init["parent_id"] + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["parentId"] = "parent_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "parent_id", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == "parent_id_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.move(request) + + expected_params = [ + ( + "parentId", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_move_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.move._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "parentId", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "parentId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_move_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_move" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_move" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.MoveFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.move( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_move_rest_bad_request( + transport: str = "rest", request_type=compute.MoveFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.move(request) + + +def test_move_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + parent_id="parent_id_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.move(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/move" + % client.transport._host, + args[1], + ) + + +def test_move_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.move( + compute.MoveFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + parent_id="parent_id_value", + ) + + +def test_move_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.MoveFirewallPolicyRequest, + dict, + ], +) +def test_move_unary_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.move_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_move_unary_rest_required_fields( + request_type=compute.MoveFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["parent_id"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "parentId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == request_init["parent_id"] + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["parentId"] = "parent_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "parent_id", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "parentId" in jsonified_request + assert jsonified_request["parentId"] == "parent_id_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.move_unary(request) + + expected_params = [ + ( + "parentId", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_move_unary_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.move._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "parentId", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "parentId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_move_unary_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_move" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_move" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.MoveFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.move_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_move_unary_rest_bad_request( + transport: str = "rest", request_type=compute.MoveFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.move_unary(request) + + +def test_move_unary_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + parent_id="parent_id_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.move_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/move" + % client.transport._host, + args[1], + ) + + +def test_move_unary_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.move_unary( + compute.MoveFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + parent_id="parent_id_value", + ) + + +def test_move_unary_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchFirewallPolicyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchFirewallPolicyRequest): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_patch_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchFirewallPolicyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.FirewallPoliciesRestInterceptor(), + ) + client = FirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.FirewallPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_patch_unary_rest_error(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRuleFirewallPolicyRequest, + dict, + ], +) +def test_patch_rule_rest(request_type): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rule_rest_required_fields( + request_type=compute.PatchRuleFirewallPolicyRequest, +): + transport_class = transports.FirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "priority", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" -@pytest.mark.parametrize( - "request_type", - [ - compute.ListAssociationsFirewallPolicyRequest, - dict, - ], -) -def test_list_associations_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) - - # send a request that will satisfy transcoding - request_init = {} request = request_type(request_init) + # Designate an appropriate value for the returned response. + return_value = compute.Operation() # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.FirewallPoliciesListAssociationsResponse( - kind="kind_value", - ) + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.FirewallPoliciesListAssociationsResponse.to_json( - return_value - ) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list_associations(request) + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPoliciesListAssociationsResponse) - assert response.kind == "kind_value" + response = client.patch_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rule_rest_unset_required_fields(): + transport = transports.FirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "priority", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_associations_rest_interceptors(null_interceptor): +def test_patch_rule_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3620,9 +7096,9 @@ def test_list_associations_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_list_associations" + transports.FirewallPoliciesRestInterceptor, "post_patch_rule" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_list_associations" + transports.FirewallPoliciesRestInterceptor, "pre_patch_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3637,21 +7113,17 @@ def test_list_associations_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.FirewallPoliciesListAssociationsResponse.to_json( - compute.FirewallPoliciesListAssociationsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListAssociationsFirewallPolicyRequest() + request = compute.PatchRuleFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPoliciesListAssociationsResponse + post.return_value = compute.Operation - client.list_associations( + client.patch_rule( request, metadata=[ ("key", "val"), @@ -3663,8 +7135,8 @@ def test_list_associations_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_associations_rest_bad_request( - transport: str = "rest", request_type=compute.ListAssociationsFirewallPolicyRequest +def test_patch_rule_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRuleFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3672,7 +7144,35 @@ def test_list_associations_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {} + request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3684,10 +7184,72 @@ def test_list_associations_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_associations(request) + client.patch_rule(request) -def test_list_associations_rest_error(): +def test_patch_rule_rest_flattened(): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"firewall_policy": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_rule(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/patchRule" + % client.transport._host, + args[1], + ) + + +def test_patch_rule_rest_flattened_error(transport: str = "rest"): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_rule( + compute.PatchRuleFirewallPolicyRequest(), + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), + ) + + +def test_patch_rule_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3696,11 +7258,11 @@ def test_list_associations_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.MoveFirewallPolicyRequest, + compute.PatchRuleFirewallPolicyRequest, dict, ], ) -def test_move_unary_rest(request_type): +def test_patch_rule_unary_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3708,6 +7270,34 @@ def test_move_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3744,36 +7334,14 @@ def test_move_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.move_unary(request) + response = client.patch_rule_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_move_unary_rest_required_fields( - request_type=compute.MoveFirewallPolicyRequest, +def test_patch_rule_unary_rest_required_fields( + request_type=compute.PatchRuleFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -3790,7 +7358,7 @@ def test_move_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).move._get_unset_required_fields(jsonified_request) + ).patch_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3799,11 +7367,11 @@ def test_move_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).move._get_unset_required_fields(jsonified_request) + ).patch_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "parent_id", + "priority", "request_id", ) ) @@ -3834,6 +7402,7 @@ def test_move_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3842,32 +7411,37 @@ def test_move_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.move_unary(request) + response = client.patch_rule_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_move_unary_rest_unset_required_fields(): +def test_patch_rule_unary_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.move._get_unset_required_fields({}) + unset_fields = transport.patch_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "parentId", + "priority", "requestId", ) ) - & set(("firewallPolicy",)) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + ) + ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_move_unary_rest_interceptors(null_interceptor): +def test_patch_rule_unary_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3880,9 +7454,9 @@ def test_move_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_move" + transports.FirewallPoliciesRestInterceptor, "post_patch_rule" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_move" + transports.FirewallPoliciesRestInterceptor, "pre_patch_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3899,7 +7473,7 @@ def test_move_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.MoveFirewallPolicyRequest() + request = compute.PatchRuleFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3907,7 +7481,7 @@ def test_move_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.move_unary( + client.patch_rule_unary( request, metadata=[ ("key", "val"), @@ -3919,8 +7493,8 @@ def test_move_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_move_unary_rest_bad_request( - transport: str = "rest", request_type=compute.MoveFirewallPolicyRequest +def test_patch_rule_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRuleFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3929,6 +7503,34 @@ def test_move_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3940,10 +7542,10 @@ def test_move_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.move_unary(request) + client.patch_rule_unary(request) -def test_move_unary_rest_flattened(): +def test_patch_rule_unary_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3960,7 +7562,9 @@ def test_move_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( firewall_policy="firewall_policy_value", - parent_id="parent_id_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -3972,20 +7576,20 @@ def test_move_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.move_unary(**mock_args) + client.patch_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/move" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/patchRule" % client.transport._host, args[1], ) -def test_move_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3994,14 +7598,16 @@ def test_move_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.move_unary( - compute.MoveFirewallPolicyRequest(), + client.patch_rule_unary( + compute.PatchRuleFirewallPolicyRequest(), firewall_policy="firewall_policy_value", - parent_id="parent_id_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_move_unary_rest_error(): +def test_patch_rule_unary_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4010,11 +7616,11 @@ def test_move_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchFirewallPolicyRequest, + compute.RemoveAssociationFirewallPolicyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_remove_association_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4022,66 +7628,6 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -4118,10 +7664,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.remove_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -4146,8 +7692,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchFirewallPolicyRequest, +def test_remove_association_rest_required_fields( + request_type=compute.RemoveAssociationFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -4164,7 +7710,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4173,9 +7719,14 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4200,10 +7751,9 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -4212,32 +7762,32 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.remove_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_remove_association_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.remove_association._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "firewallPolicy", - "firewallPolicyResource", + "name", + "requestId", ) ) + & set(("firewallPolicy",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_remove_association_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4250,9 +7800,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_patch" + transports.FirewallPoliciesRestInterceptor, "post_remove_association" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_patch" + transports.FirewallPoliciesRestInterceptor, "pre_remove_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4269,7 +7819,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchFirewallPolicyRequest() + request = compute.RemoveAssociationFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4277,7 +7827,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.remove_association( request, metadata=[ ("key", "val"), @@ -4288,77 +7838,17 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() - -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchFirewallPolicyRequest -): - client = FirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"firewall_policy": "sample1"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } + +def test_remove_association_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveAssociationFirewallPolicyRequest +): + client = FirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"firewall_policy": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4370,10 +7860,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.remove_association(request) -def test_patch_unary_rest_flattened(): +def test_remove_association_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4390,13 +7880,6 @@ def test_patch_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( firewall_policy="firewall_policy_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), ) mock_args.update(sample_request) @@ -4408,20 +7891,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.remove_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/removeAssociation" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_association_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4430,20 +7913,13 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchFirewallPolicyRequest(), + client.remove_association( + compute.RemoveAssociationFirewallPolicyRequest(), firewall_policy="firewall_policy_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), ) -def test_patch_unary_rest_error(): +def test_remove_association_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4452,11 +7928,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchRuleFirewallPolicyRequest, + compute.RemoveAssociationFirewallPolicyRequest, dict, ], ) -def test_patch_rule_unary_rest(request_type): +def test_remove_association_unary_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4464,34 +7940,6 @@ def test_patch_rule_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -4528,36 +7976,14 @@ def test_patch_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_association_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_rule_unary_rest_required_fields( - request_type=compute.PatchRuleFirewallPolicyRequest, +def test_remove_association_unary_rest_required_fields( + request_type=compute.RemoveAssociationFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -4574,7 +8000,7 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4583,11 +8009,11 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "priority", + "name", "request_id", ) ) @@ -4618,7 +8044,6 @@ def test_patch_rule_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -4627,37 +8052,32 @@ def test_patch_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_association_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_rule_unary_rest_unset_required_fields(): +def test_remove_association_unary_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch_rule._get_unset_required_fields({}) + unset_fields = transport.remove_association._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "priority", + "name", "requestId", ) ) - & set( - ( - "firewallPolicy", - "firewallPolicyRuleResource", - ) - ) + & set(("firewallPolicy",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_rule_unary_rest_interceptors(null_interceptor): +def test_remove_association_unary_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4670,9 +8090,9 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_patch_rule" + transports.FirewallPoliciesRestInterceptor, "post_remove_association" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_patch_rule" + transports.FirewallPoliciesRestInterceptor, "pre_remove_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4689,7 +8109,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRuleFirewallPolicyRequest() + request = compute.RemoveAssociationFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4697,7 +8117,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_rule_unary( + client.remove_association_unary( request, metadata=[ ("key", "val"), @@ -4709,8 +8129,8 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_rule_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRuleFirewallPolicyRequest +def test_remove_association_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveAssociationFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4719,34 +8139,6 @@ def test_patch_rule_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"firewall_policy": "sample1"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4758,10 +8150,10 @@ def test_patch_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_rule_unary(request) + client.remove_association_unary(request) -def test_patch_rule_unary_rest_flattened(): +def test_remove_association_unary_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4778,9 +8170,6 @@ def test_patch_rule_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" - ), ) mock_args.update(sample_request) @@ -4792,20 +8181,20 @@ def test_patch_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_rule_unary(**mock_args) + client.remove_association_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/patchRule" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/removeAssociation" % client.transport._host, args[1], ) -def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4814,16 +8203,13 @@ def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_rule_unary( - compute.PatchRuleFirewallPolicyRequest(), + client.remove_association_unary( + compute.RemoveAssociationFirewallPolicyRequest(), firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" - ), ) -def test_patch_rule_unary_rest_error(): +def test_remove_association_unary_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4832,11 +8218,11 @@ def test_patch_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RemoveAssociationFirewallPolicyRequest, + compute.RemoveRuleFirewallPolicyRequest, dict, ], ) -def test_remove_association_unary_rest(request_type): +def test_remove_rule_rest(request_type): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4880,10 +8266,10 @@ def test_remove_association_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_association_unary(request) + response = client.remove_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -4908,8 +8294,8 @@ def test_remove_association_unary_rest(request_type): assert response.zone == "zone_value" -def test_remove_association_unary_rest_required_fields( - request_type=compute.RemoveAssociationFirewallPolicyRequest, +def test_remove_rule_rest_required_fields( + request_type=compute.RemoveRuleFirewallPolicyRequest, ): transport_class = transports.FirewallPoliciesRestTransport @@ -4926,7 +8312,7 @@ def test_remove_association_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_association._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4935,11 +8321,11 @@ def test_remove_association_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_association._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "name", + "priority", "request_id", ) ) @@ -4978,23 +8364,23 @@ def test_remove_association_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_association_unary(request) + response = client.remove_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_association_unary_rest_unset_required_fields(): +def test_remove_rule_rest_unset_required_fields(): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_association._get_unset_required_fields({}) + unset_fields = transport.remove_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "name", + "priority", "requestId", ) ) @@ -5003,7 +8389,7 @@ def test_remove_association_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_association_unary_rest_interceptors(null_interceptor): +def test_remove_rule_rest_interceptors(null_interceptor): transport = transports.FirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5016,9 +8402,9 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "post_remove_association" + transports.FirewallPoliciesRestInterceptor, "post_remove_rule" ) as post, mock.patch.object( - transports.FirewallPoliciesRestInterceptor, "pre_remove_association" + transports.FirewallPoliciesRestInterceptor, "pre_remove_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5035,7 +8421,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveAssociationFirewallPolicyRequest() + request = compute.RemoveRuleFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -5043,7 +8429,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_association_unary( + client.remove_rule( request, metadata=[ ("key", "val"), @@ -5055,8 +8441,8 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_association_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemoveAssociationFirewallPolicyRequest +def test_remove_rule_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveRuleFirewallPolicyRequest ): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5076,10 +8462,10 @@ def test_remove_association_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_association_unary(request) + client.remove_rule(request) -def test_remove_association_unary_rest_flattened(): +def test_remove_rule_rest_flattened(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5107,20 +8493,20 @@ def test_remove_association_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_association_unary(**mock_args) + client.remove_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/removeAssociation" + "%s/compute/v1/locations/global/firewallPolicies/{firewall_policy}/removeRule" % client.transport._host, args[1], ) -def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_rule_rest_flattened_error(transport: str = "rest"): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5129,13 +8515,13 @@ def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_association_unary( - compute.RemoveAssociationFirewallPolicyRequest(), + client.remove_rule( + compute.RemoveRuleFirewallPolicyRequest(), firewall_policy="firewall_policy_value", ) -def test_remove_association_unary_rest_error(): +def test_remove_rule_rest_error(): client = FirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5196,28 +8582,6 @@ def test_remove_rule_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_remove_rule_unary_rest_required_fields( @@ -6235,6 +9599,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = FirewallPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_firewall_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -6283,6 +9660,14 @@ def test_firewall_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_firewall_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_firewalls.py b/tests/unit/gapic/compute_v1/test_firewalls.py index 702139fe7..1aa29b44a 100644 --- a/tests/unit/gapic/compute_v1/test_firewalls.py +++ b/tests/unit/gapic/compute_v1/test_firewalls.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -512,7 +514,7 @@ def test_firewalls_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -556,10 +558,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -584,7 +586,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteFirewallRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteFirewallRequest): transport_class = transports.FirewallsRestTransport request_init = {} @@ -651,14 +653,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteFirewallRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -676,7 +678,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), @@ -714,7 +716,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -726,7 +728,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteFirewallRequest ): client = FirewallsClient( @@ -747,10 +749,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -779,7 +781,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -792,7 +794,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -801,14 +803,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteFirewallRequest(), project="project_value", firewall="firewall_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -817,11 +819,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetFirewallRequest, + compute.DeleteFirewallRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -834,54 +836,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Firewall( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - destination_ranges=["destination_ranges_value"], - direction="direction_value", - disabled=True, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - priority=898, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - source_ranges=["source_ranges_value"], - source_service_accounts=["source_service_accounts_value"], - source_tags=["source_tags_value"], - target_service_accounts=["target_service_accounts_value"], - target_tags=["target_tags_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Firewall.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Firewall) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.destination_ranges == ["destination_ranges_value"] - assert response.direction == "direction_value" - assert response.disabled is True - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.priority == 898 - assert response.self_link == "self_link_value" - assert response.source_ranges == ["source_ranges_value"] - assert response.source_service_accounts == ["source_service_accounts_value"] - assert response.source_tags == ["source_tags_value"] - assert response.target_service_accounts == ["target_service_accounts_value"] - assert response.target_tags == ["target_tags_value"] + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetFirewallRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteFirewallRequest): transport_class = transports.FirewallsRestTransport request_init = {} @@ -898,7 +890,7 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -908,7 +900,9 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -924,7 +918,7 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Firewall() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -935,32 +929,32 @@ def test_get_rest_required_fields(request_type=compute.GetFirewallRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Firewall.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "firewall", @@ -971,7 +965,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), @@ -982,9 +976,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallsRestInterceptor, "post_get" + transports.FirewallsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.FirewallsRestInterceptor, "pre_get" + transports.FirewallsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -999,17 +993,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Firewall.to_json(compute.Firewall()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetFirewallRequest() + request = compute.DeleteFirewallRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Firewall + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1021,8 +1015,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetFirewallRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteFirewallRequest ): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1042,10 +1036,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1054,7 +1048,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Firewall() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "firewall": "sample2"} @@ -1069,12 +1063,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Firewall.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1087,7 +1081,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1096,14 +1090,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetFirewallRequest(), + client.delete_unary( + compute.DeleteFirewallRequest(), project="project_value", firewall="firewall_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1112,126 +1106,75 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertFirewallRequest, + compute.GetFirewallRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["firewall_resource"] = { - "allowed": [ - { - "I_p_protocol": "I_p_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "creation_timestamp": "creation_timestamp_value", - "denied": [ - { - "I_p_protocol": "I_p_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "description": "description_value", - "destination_ranges": [ - "destination_ranges_value_1", - "destination_ranges_value_2", - ], - "direction": "direction_value", - "disabled": True, - "id": 205, - "kind": "kind_value", - "log_config": {"enable": True, "metadata": "metadata_value"}, - "name": "name_value", - "network": "network_value", - "priority": 898, - "self_link": "self_link_value", - "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], - "source_service_accounts": [ - "source_service_accounts_value_1", - "source_service_accounts_value_2", - ], - "source_tags": ["source_tags_value_1", "source_tags_value_2"], - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - "target_tags": ["target_tags_value_1", "target_tags_value_2"], - } + request_init = {"project": "sample1", "firewall": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Firewall( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + destination_ranges=["destination_ranges_value"], + direction="direction_value", + disabled=True, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + network="network_value", + priority=898, self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + source_ranges=["source_ranges_value"], + source_service_accounts=["source_service_accounts_value"], + source_tags=["source_tags_value"], + target_service_accounts=["target_service_accounts_value"], + target_tags=["target_tags_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Firewall.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Firewall) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.destination_ranges == ["destination_ranges_value"] + assert response.direction == "direction_value" + assert response.disabled is True assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.network == "network_value" + assert response.priority == 898 assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.source_ranges == ["source_ranges_value"] + assert response.source_service_accounts == ["source_service_accounts_value"] + assert response.source_tags == ["source_tags_value"] + assert response.target_service_accounts == ["target_service_accounts_value"] + assert response.target_tags == ["target_tags_value"] -def test_insert_unary_rest_required_fields(request_type=compute.InsertFirewallRequest): +def test_get_rest_required_fields(request_type=compute.GetFirewallRequest): transport_class = transports.FirewallsRestTransport request_init = {} + request_init["firewall"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1244,21 +1187,22 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertFirewallRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewall"] = "firewall_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewall" in jsonified_request + assert jsonified_request["firewall"] == "firewall_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1269,7 +1213,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertFirewallRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Firewall() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1280,26 +1224,739 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertFirewallRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Firewall.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "firewall", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), + ) + client = FirewallsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.FirewallsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Firewall.to_json(compute.Firewall()) + + request = compute.GetFirewallRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Firewall + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetFirewallRequest +): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Firewall() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "firewall": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall="firewall_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Firewall.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewalls/{firewall}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetFirewallRequest(), + project="project_value", + firewall="firewall_value", + ) + + +def test_get_rest_error(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertFirewallRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertFirewallRequest): + transport_class = transports.FirewallsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), + ) + client = FirewallsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.FirewallsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertFirewallRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertFirewallRequest +): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_resource=compute.Firewall( + allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewalls" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertFirewallRequest(), + project="project_value", + firewall_resource=compute.Firewall( + allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] + ), + ) + + +def test_insert_rest_error(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertFirewallRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertFirewallRequest): + transport_class = transports.FirewallsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1317,7 +1974,735 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), + ) + client = FirewallsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.FirewallsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertFirewallRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertFirewallRequest +): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_resource=compute.Firewall( + allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewalls" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertFirewallRequest(), + project="project_value", + firewall_resource=compute.Firewall( + allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] + ), + ) + + +def test_insert_unary_rest_error(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListFirewallsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListFirewallsRequest): + transport_class = transports.FirewallsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), + ) + client = FirewallsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.FirewallsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.FirewallsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallList.to_json(compute.FirewallList()) + + request = compute.ListFirewallsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListFirewallsRequest +): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewalls" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListFirewallsRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.FirewallList( + items=[ + compute.Firewall(), + compute.Firewall(), + compute.Firewall(), + ], + next_page_token="abc", + ), + compute.FirewallList( + items=[], + next_page_token="def", + ), + compute.FirewallList( + items=[ + compute.Firewall(), + ], + next_page_token="ghi", + ), + compute.FirewallList( + items=[ + compute.Firewall(), + compute.Firewall(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.FirewallList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Firewall) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchFirewallRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall": "sample2"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchFirewallRequest): + transport_class = transports.FirewallsRestTransport + + request_init = {} + request_init["firewall"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewall"] = "firewall_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewall" in jsonified_request + assert jsonified_request["firewall"] == "firewall_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = FirewallsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.FirewallsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewall", + "firewallResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), @@ -1328,9 +2713,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallsRestInterceptor, "post_insert" + transports.FirewallsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.FirewallsRestInterceptor, "pre_insert" + transports.FirewallsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1347,7 +2732,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertFirewallRequest() + request = compute.PatchFirewallRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1355,7 +2740,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.patch( request, metadata=[ ("key", "val"), @@ -1367,8 +2752,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertFirewallRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchFirewallRequest ): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1376,7 +2761,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "firewall": "sample2"} request_init["firewall_resource"] = { "allowed": [ { @@ -1428,10 +2813,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1443,11 +2828,12 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "firewall": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + firewall="firewall_value", firewall_resource=compute.Firewall( allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] ), @@ -1462,20 +2848,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewalls" + "%s/compute/v1/projects/{project}/global/firewalls/{firewall}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1484,16 +2870,17 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertFirewallRequest(), + client.patch( + compute.PatchFirewallRequest(), project="project_value", + firewall="firewall_value", firewall_resource=compute.Firewall( allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] ), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1502,50 +2889,105 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListFirewallsRequest, + compute.PatchFirewallRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "firewall": "sample2"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListFirewallsRequest): +def test_patch_unary_rest_required_fields(request_type=compute.PatchFirewallRequest): transport_class = transports.FirewallsRestTransport request_init = {} + request_init["firewall"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1558,29 +3000,24 @@ def test_list_rest_required_fields(request_type=compute.ListFirewallsRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewall"] = "firewall_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewall" in jsonified_request + assert jsonified_request["firewall"] == "firewall_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1591,7 +3028,7 @@ def test_list_rest_required_fields(request_type=compute.ListFirewallsRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1602,46 +3039,45 @@ def test_list_rest_required_fields(request_type=compute.ListFirewallsRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "firewall", + "firewallResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), @@ -1652,9 +3088,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallsRestInterceptor, "post_list" + transports.FirewallsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.FirewallsRestInterceptor, "pre_list" + transports.FirewallsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1669,17 +3105,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallList.to_json(compute.FirewallList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListFirewallsRequest() + request = compute.PatchFirewallRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -1691,8 +3127,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListFirewallsRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchFirewallRequest ): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1700,7 +3136,47 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "firewall": "sample2"} + request_init["firewall_resource"] = { + "allowed": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "creation_timestamp": "creation_timestamp_value", + "denied": [ + { + "I_p_protocol": "I_p_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "description": "description_value", + "destination_ranges": [ + "destination_ranges_value_1", + "destination_ranges_value_2", + ], + "direction": "direction_value", + "disabled": True, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True, "metadata": "metadata_value"}, + "name": "name_value", + "network": "network_value", + "priority": 898, + "self_link": "self_link_value", + "source_ranges": ["source_ranges_value_1", "source_ranges_value_2"], + "source_service_accounts": [ + "source_service_accounts_value_1", + "source_service_accounts_value_2", + ], + "source_tags": ["source_tags_value_1", "source_tags_value_2"], + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + "target_tags": ["target_tags_value_1", "target_tags_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1712,10 +3188,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1724,39 +3200,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "firewall": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + firewall="firewall_value", + firewall_resource=compute.Firewall( + allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewalls" + "%s/compute/v1/projects/{project}/global/firewalls/{firewall}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1765,81 +3245,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListFirewallsRequest(), + client.patch_unary( + compute.PatchFirewallRequest(), project="project_value", + firewall="firewall_value", + firewall_resource=compute.Firewall( + allowed=[compute.Allowed(I_p_protocol="I_p_protocol_value")] + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = FirewallsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.FirewallList( - items=[ - compute.Firewall(), - compute.Firewall(), - compute.Firewall(), - ], - next_page_token="abc", - ), - compute.FirewallList( - items=[], - next_page_token="def", - ), - compute.FirewallList( - items=[ - compute.Firewall(), - ], - next_page_token="ghi", - ), - compute.FirewallList( - items=[ - compute.Firewall(), - compute.Firewall(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.FirewallList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Firewall) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchFirewallRequest, + compute.UpdateFirewallRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1923,10 +3352,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1951,7 +3380,7 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchFirewallRequest): +def test_update_rest_required_fields(request_type=compute.UpdateFirewallRequest): transport_class = transports.FirewallsRestTransport request_init = {} @@ -1968,7 +3397,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchFirewallRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1978,7 +3407,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchFirewallRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2007,7 +3436,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchFirewallRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2019,19 +3448,19 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchFirewallRequ response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -2045,7 +3474,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.FirewallsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.FirewallsRestInterceptor(), @@ -2056,9 +3485,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.FirewallsRestInterceptor, "post_patch" + transports.FirewallsRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.FirewallsRestInterceptor, "pre_patch" + transports.FirewallsRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2075,7 +3504,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchFirewallRequest() + request = compute.UpdateFirewallRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2083,7 +3512,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2095,8 +3524,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchFirewallRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateFirewallRequest ): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2156,10 +3585,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2191,7 +3620,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2204,7 +3633,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2213,8 +3642,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchFirewallRequest(), + client.update( + compute.UpdateFirewallRequest(), project="project_value", firewall="firewall_value", firewall_resource=compute.Firewall( @@ -2223,7 +3652,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = FirewallsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2324,28 +3753,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields(request_type=compute.UpdateFirewallRequest): @@ -2701,6 +4108,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = FirewallsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_firewalls_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2737,6 +4157,14 @@ def test_firewalls_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_firewalls_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_forwarding_rules.py b/tests/unit/gapic/compute_v1/test_forwarding_rules.py index c6d599a44..07994ae4f 100644 --- a/tests/unit/gapic/compute_v1/test_forwarding_rules.py +++ b/tests/unit/gapic/compute_v1/test_forwarding_rules.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -898,7 +900,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -946,10 +948,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -974,9 +976,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteForwardingRuleRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteForwardingRuleRequest): transport_class = transports.ForwardingRulesRestTransport request_init = {} @@ -1047,14 +1047,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1073,7 +1073,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1113,7 +1113,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1125,7 +1125,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteForwardingRuleRequest ): client = ForwardingRulesClient( @@ -1150,10 +1150,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1187,7 +1187,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1200,7 +1200,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1209,7 +1209,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteForwardingRuleRequest(), project="project_value", region="region_value", @@ -1217,7 +1217,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1226,11 +1226,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetForwardingRuleRequest, + compute.DeleteForwardingRuleRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1247,76 +1247,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRule( - I_p_address="I_p_address_value", - I_p_protocol="I_p_protocol_value", - all_ports=True, - allow_global_access=True, - backend_service="backend_service_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_version="ip_version_value", - is_mirroring_collector=True, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", - load_balancing_scheme="load_balancing_scheme_value", name="name_value", - network="network_value", - network_tier="network_tier_value", - port_range="port_range_value", - ports=["ports_value"], - psc_connection_id=1793, - psc_connection_status="psc_connection_status_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - service_label="service_label_value", - service_name="service_name_value", - subnetwork="subnetwork_value", - target="target_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.ForwardingRule) - assert response.I_p_address == "I_p_address_value" - assert response.I_p_protocol == "I_p_protocol_value" - assert response.all_ports is True - assert response.allow_global_access is True - assert response.backend_service == "backend_service_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.ip_version == "ip_version_value" - assert response.is_mirroring_collector is True - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.load_balancing_scheme == "load_balancing_scheme_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_tier == "network_tier_value" - assert response.port_range == "port_range_value" - assert response.ports == ["ports_value"] - assert response.psc_connection_id == 1793 - assert response.psc_connection_status == "psc_connection_status_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.service_label == "service_label_value" - assert response.service_name == "service_name_value" - assert response.subnetwork == "subnetwork_value" - assert response.target == "target_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetForwardingRuleRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteForwardingRuleRequest, +): transport_class = transports.ForwardingRulesRestTransport request_init = {} @@ -1334,7 +1304,7 @@ def test_get_rest_required_fields(request_type=compute.GetForwardingRuleRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1345,7 +1315,9 @@ def test_get_rest_required_fields(request_type=compute.GetForwardingRuleRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1363,7 +1335,7 @@ def test_get_rest_required_fields(request_type=compute.GetForwardingRuleRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRule() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1374,32 +1346,32 @@ def test_get_rest_required_fields(request_type=compute.GetForwardingRuleRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "forwardingRule", @@ -1411,7 +1383,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1424,9 +1396,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "post_get" + transports.ForwardingRulesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "pre_get" + transports.ForwardingRulesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1441,19 +1413,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ForwardingRule.to_json( - compute.ForwardingRule() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetForwardingRuleRequest() + request = compute.DeleteForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRule + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1465,8 +1435,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetForwardingRuleRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteForwardingRuleRequest ): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1490,10 +1460,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1502,7 +1472,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRule() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1522,12 +1492,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1540,7 +1510,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1549,15 +1519,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetForwardingRuleRequest(), + client.delete_unary( + compute.DeleteForwardingRuleRequest(), project="project_value", region="region_value", forwarding_rule="forwarding_rule_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1566,131 +1536,101 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertForwardingRuleRequest, + compute.GetForwardingRuleRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["forwarding_rule_resource"] = { - "I_p_address": "I_p_address_value", - "I_p_protocol": "I_p_protocol_value", - "all_ports": True, - "allow_global_access": True, - "backend_service": "backend_service_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_version": "ip_version_value", - "is_mirroring_collector": True, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "load_balancing_scheme": "load_balancing_scheme_value", - "metadata_filters": [ - { - "filter_labels": [{"name": "name_value", "value": "value_value"}], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "name": "name_value", - "network": "network_value", - "network_tier": "network_tier_value", - "port_range": "port_range_value", - "ports": ["ports_value_1", "ports_value_2"], - "psc_connection_id": 1793, - "psc_connection_status": "psc_connection_status_value", - "region": "region_value", - "self_link": "self_link_value", - "service_directory_registrations": [ - { - "namespace": "namespace_value", - "service": "service_value", - "service_directory_region": "service_directory_region_value", - } - ], - "service_label": "service_label_value", - "service_name": "service_name_value", - "subnetwork": "subnetwork_value", - "target": "target_value", + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.ForwardingRule( + I_p_address="I_p_address_value", + I_p_protocol="I_p_protocol_value", + all_ports=True, + allow_global_access=True, + backend_service="backend_service_value", creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + ip_version="ip_version_value", + is_mirroring_collector=True, kind="kind_value", + label_fingerprint="label_fingerprint_value", + load_balancing_scheme="load_balancing_scheme_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + network="network_value", + network_tier="network_tier_value", + port_range="port_range_value", + ports=["ports_value"], + psc_connection_id=1793, + psc_connection_status="psc_connection_status_value", region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + service_label="service_label_value", + service_name="service_name_value", + subnetwork="subnetwork_value", + target="target_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ForwardingRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.ForwardingRule) + assert response.I_p_address == "I_p_address_value" + assert response.I_p_protocol == "I_p_protocol_value" + assert response.all_ports is True + assert response.allow_global_access is True + assert response.backend_service == "backend_service_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.ip_version == "ip_version_value" + assert response.is_mirroring_collector is True assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.load_balancing_scheme == "load_balancing_scheme_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.network == "network_value" + assert response.network_tier == "network_tier_value" + assert response.port_range == "port_range_value" + assert response.ports == ["ports_value"] + assert response.psc_connection_id == 1793 + assert response.psc_connection_status == "psc_connection_status_value" assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.service_label == "service_label_value" + assert response.service_name == "service_name_value" + assert response.subnetwork == "subnetwork_value" + assert response.target == "target_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertForwardingRuleRequest, -): +def test_get_rest_required_fields(request_type=compute.GetForwardingRuleRequest): transport_class = transports.ForwardingRulesRestTransport request_init = {} + request_init["forwarding_rule"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1704,22 +1644,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["forwardingRule"] = "forwarding_rule_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1732,7 +1673,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.ForwardingRule() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1743,36 +1684,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ForwardingRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "forwardingRuleResource", + "forwardingRule", "project", "region", ) @@ -1781,7 +1721,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1794,9 +1734,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "post_insert" + transports.ForwardingRulesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "pre_insert" + transports.ForwardingRulesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1811,17 +1751,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.ForwardingRule.to_json( + compute.ForwardingRule() + ) - request = compute.InsertForwardingRuleRequest() + request = compute.GetForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.ForwardingRule - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1833,8 +1775,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertForwardingRuleRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetForwardingRuleRequest ): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1842,49 +1784,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["forwarding_rule_resource"] = { - "I_p_address": "I_p_address_value", - "I_p_protocol": "I_p_protocol_value", - "all_ports": True, - "allow_global_access": True, - "backend_service": "backend_service_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_version": "ip_version_value", - "is_mirroring_collector": True, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "load_balancing_scheme": "load_balancing_scheme_value", - "metadata_filters": [ - { - "filter_labels": [{"name": "name_value", "value": "value_value"}], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "name": "name_value", - "network": "network_value", - "network_tier": "network_tier_value", - "port_range": "port_range_value", - "ports": ["ports_value_1", "ports_value_2"], - "psc_connection_id": 1793, - "psc_connection_status": "psc_connection_status_value", - "region": "region_value", - "self_link": "self_link_value", - "service_directory_registrations": [ - { - "namespace": "namespace_value", - "service": "service_value", - "service_directory_region": "service_directory_region_value", - } - ], - "service_label": "service_label_value", - "service_name": "service_name_value", - "subnetwork": "subnetwork_value", - "target": "target_value", + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", } request = request_type(request_init) @@ -1897,10 +1800,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1909,43 +1812,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.ForwardingRule() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" - ), + forwarding_rule="forwarding_rule_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ForwardingRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules" + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwarding_rule}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1954,17 +1859,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertForwardingRuleRequest(), + client.get( + compute.GetForwardingRuleRequest(), project="project_value", region="region_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" - ), + forwarding_rule="forwarding_rule_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1973,11 +1876,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListForwardingRulesRequest, + compute.InsertForwardingRuleRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1985,35 +1888,114 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRuleList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRuleList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListForwardingRulesRequest): +def test_insert_rest_required_fields(request_type=compute.InsertForwardingRuleRequest): transport_class = transports.ForwardingRulesRestTransport request_init = {} @@ -2030,7 +2012,7 @@ def test_list_rest_required_fields(request_type=compute.ListForwardingRulesReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2040,17 +2022,9 @@ def test_list_rest_required_fields(request_type=compute.ListForwardingRulesReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2066,7 +2040,7 @@ def test_list_rest_required_fields(request_type=compute.ListForwardingRulesReque request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRuleList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2077,42 +2051,36 @@ def test_list_rest_required_fields(request_type=compute.ListForwardingRulesReque # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRuleList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "forwardingRuleResource", "project", "region", ) @@ -2121,7 +2089,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2134,9 +2102,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "post_list" + transports.ForwardingRulesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "pre_list" + transports.ForwardingRulesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2151,19 +2119,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ForwardingRuleList.to_json( - compute.ForwardingRuleList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListForwardingRulesRequest() + request = compute.InsertForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRuleList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -2175,8 +2141,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListForwardingRulesRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertForwardingRuleRequest ): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2185,6 +2151,49 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2196,10 +2205,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2208,7 +2217,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRuleList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -2217,18 +2226,21 @@ def test_list_rest_flattened(): mock_args = dict( project="project_value", region="region_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRuleList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2241,7 +2253,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2250,93 +2262,37 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListForwardingRulesRequest(), + client.insert( + compute.InsertForwardingRuleRequest(), project="project_value", region="region_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): client = ForwardingRulesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ForwardingRuleList( - items=[ - compute.ForwardingRule(), - compute.ForwardingRule(), - compute.ForwardingRule(), - ], - next_page_token="abc", - ), - compute.ForwardingRuleList( - items=[], - next_page_token="def", - ), - compute.ForwardingRuleList( - items=[ - compute.ForwardingRule(), - ], - next_page_token="ghi", - ), - compute.ForwardingRuleList( - items=[ - compute.ForwardingRule(), - compute.ForwardingRule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ForwardingRuleList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ForwardingRule) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchForwardingRuleRequest, + compute.InsertForwardingRuleRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_insert_unary_rest(request_type): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "forwarding_rule": "sample3", - } + request_init = {"project": "sample1", "region": "sample2"} request_init["forwarding_rule_resource"] = { "I_p_address": "I_p_address_value", "I_p_protocol": "I_p_protocol_value", @@ -2416,43 +2372,1883 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertForwardingRuleRequest, +): + transport_class = transports.ForwardingRulesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "forwardingRuleResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ForwardingRulesRestInterceptor(), + ) + client = ForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertForwardingRuleRequest +): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertForwardingRuleRequest(), + project="project_value", + region="region_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListForwardingRulesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ForwardingRuleList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ForwardingRuleList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListForwardingRulesRequest): + transport_class = transports.ForwardingRulesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ForwardingRuleList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ForwardingRuleList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ForwardingRulesRestInterceptor(), + ) + client = ForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ForwardingRuleList.to_json( + compute.ForwardingRuleList() + ) + + request = compute.ListForwardingRulesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ForwardingRuleList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListForwardingRulesRequest +): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ForwardingRuleList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ForwardingRuleList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListForwardingRulesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ForwardingRuleList( + items=[ + compute.ForwardingRule(), + compute.ForwardingRule(), + compute.ForwardingRule(), + ], + next_page_token="abc", + ), + compute.ForwardingRuleList( + items=[], + next_page_token="def", + ), + compute.ForwardingRuleList( + items=[ + compute.ForwardingRule(), + ], + next_page_token="ghi", + ), + compute.ForwardingRuleList( + items=[ + compute.ForwardingRule(), + compute.ForwardingRule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ForwardingRuleList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ForwardingRule) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchForwardingRuleRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchForwardingRuleRequest): + transport_class = transports.ForwardingRulesRestTransport + + request_init = {} + request_init["forwarding_rule"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["forwardingRule"] = "forwarding_rule_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "forwardingRule", + "forwardingRuleResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ForwardingRulesRestInterceptor(), + ) + client = ForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchForwardingRuleRequest +): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwarding_rule}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchForwardingRuleRequest(), + project="project_value", + region="region_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + + +def test_patch_rest_error(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchForwardingRuleRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchForwardingRuleRequest, +): + transport_class = transports.ForwardingRulesRestTransport + + request_init = {} + request_init["forwarding_rule"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["forwardingRule"] = "forwarding_rule_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "forwardingRule", + "forwardingRuleResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ForwardingRulesRestInterceptor(), + ) + client = ForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchForwardingRuleRequest +): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwarding_rule}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchForwardingRuleRequest(), + project="project_value", + region="region_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + + +def test_patch_unary_rest_error(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsForwardingRuleRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_labels(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsForwardingRuleRequest, +): + transport_class = transports.ForwardingRulesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_labels(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_labels_rest_unset_required_fields(): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_labels._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "regionSetLabelsRequestResource", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_labels_rest_interceptors(null_interceptor): + transport = transports.ForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ForwardingRulesRestInterceptor(), + ) + client = ForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "post_set_labels" + ) as post, mock.patch.object( + transports.ForwardingRulesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetLabelsForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_labels( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsForwardingRuleRequest +): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_labels(request) + + +def test_set_labels_rest_flattened(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + resource="resource_value", + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_labels(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_rest_flattened_error(transport: str = "rest"): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_labels( + compute.SetLabelsForwardingRuleRequest(), + project="project_value", + region="region_value", + resource="resource_value", + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_rest_error(): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsForwardingRuleRequest, + dict, + ], +) +def test_set_labels_unary_rest(request_type): + client = ForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_labels_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchForwardingRuleRequest, +def test_set_labels_unary_rest_required_fields( + request_type=compute.SetLabelsForwardingRuleRequest, ): transport_class = transports.ForwardingRulesRestTransport request_init = {} - request_init["forwarding_rule"] = "" request_init["project"] = "" request_init["region"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2464,29 +4260,29 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["forwardingRule"] = "forwarding_rule_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "forwardingRule" in jsonified_request - assert jsonified_request["forwardingRule"] == "forwarding_rule_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2506,7 +4302,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2518,34 +4314,34 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_labels_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_labels_unary_rest_unset_required_fields(): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "forwardingRule", - "forwardingRuleResource", "project", "region", + "regionSetLabelsRequestResource", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_labels_unary_rest_interceptors(null_interceptor): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2558,9 +4354,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "post_patch" + transports.ForwardingRulesRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "pre_patch" + transports.ForwardingRulesRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2577,7 +4373,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchForwardingRuleRequest() + request = compute.SetLabelsForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2585,7 +4381,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.set_labels_unary( request, metadata=[ ("key", "val"), @@ -2597,8 +4393,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchForwardingRuleRequest +def test_set_labels_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsForwardingRuleRequest ): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2606,53 +4402,10 @@ def test_patch_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "forwarding_rule": "sample3", - } - request_init["forwarding_rule_resource"] = { - "I_p_address": "I_p_address_value", - "I_p_protocol": "I_p_protocol_value", - "all_ports": True, - "allow_global_access": True, - "backend_service": "backend_service_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_version": "ip_version_value", - "is_mirroring_collector": True, - "kind": "kind_value", + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { "label_fingerprint": "label_fingerprint_value", "labels": {}, - "load_balancing_scheme": "load_balancing_scheme_value", - "metadata_filters": [ - { - "filter_labels": [{"name": "name_value", "value": "value_value"}], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "name": "name_value", - "network": "network_value", - "network_tier": "network_tier_value", - "port_range": "port_range_value", - "ports": ["ports_value_1", "ports_value_2"], - "psc_connection_id": 1793, - "psc_connection_status": "psc_connection_status_value", - "region": "region_value", - "self_link": "self_link_value", - "service_directory_registrations": [ - { - "namespace": "namespace_value", - "service": "service_value", - "service_directory_region": "service_directory_region_value", - } - ], - "service_label": "service_label_value", - "service_name": "service_name_value", - "subnetwork": "subnetwork_value", - "target": "target_value", } request = request_type(request_init) @@ -2665,10 +4418,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_labels_unary(request) -def test_patch_unary_rest_flattened(): +def test_set_labels_unary_rest_flattened(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2683,16 +4436,16 @@ def test_patch_unary_rest_flattened(): sample_request = { "project": "sample1", "region": "sample2", - "forwarding_rule": "sample3", + "resource": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - forwarding_rule="forwarding_rule_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" + resource="resource_value", + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) mock_args.update(sample_request) @@ -2705,20 +4458,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_labels_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwarding_rule}" + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{resource}/setLabels" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2727,18 +4480,18 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchForwardingRuleRequest(), + client.set_labels_unary( + compute.SetLabelsForwardingRuleRequest(), project="project_value", region="region_value", - forwarding_rule="forwarding_rule_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" + resource="resource_value", + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) -def test_patch_unary_rest_error(): +def test_set_labels_unary_rest_error(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2747,22 +4500,23 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetLabelsForwardingRuleRequest, + compute.SetTargetForwardingRuleRequest, dict, ], ) -def test_set_labels_unary_rest(request_type): +def test_set_target_rest(request_type): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} - request_init["region_set_labels_request_resource"] = { - "label_fingerprint": "label_fingerprint_value", - "labels": {}, + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", } + request_init["target_reference_resource"] = {"target": "target_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2799,10 +4553,10 @@ def test_set_labels_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_labels_unary(request) + response = client.set_target(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2827,15 +4581,15 @@ def test_set_labels_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_labels_unary_rest_required_fields( - request_type=compute.SetLabelsForwardingRuleRequest, +def test_set_target_rest_required_fields( + request_type=compute.SetTargetForwardingRuleRequest, ): transport_class = transports.ForwardingRulesRestTransport request_init = {} + request_init["forwarding_rule"] = "" request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2847,29 +4601,29 @@ def test_set_labels_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_labels._get_unset_required_fields(jsonified_request) + ).set_target._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["forwardingRule"] = "forwarding_rule_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_labels._get_unset_required_fields(jsonified_request) + ).set_target._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2901,34 +4655,34 @@ def test_set_labels_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_labels_unary(request) + response = client.set_target(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_labels_unary_rest_unset_required_fields(): +def test_set_target_rest_unset_required_fields(): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_labels._get_unset_required_fields({}) + unset_fields = transport.set_target._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( + "forwardingRule", "project", "region", - "regionSetLabelsRequestResource", - "resource", + "targetReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_labels_unary_rest_interceptors(null_interceptor): +def test_set_target_rest_interceptors(null_interceptor): transport = transports.ForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2941,9 +4695,9 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "post_set_labels" + transports.ForwardingRulesRestInterceptor, "post_set_target" ) as post, mock.patch.object( - transports.ForwardingRulesRestInterceptor, "pre_set_labels" + transports.ForwardingRulesRestInterceptor, "pre_set_target" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2960,7 +4714,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetLabelsForwardingRuleRequest() + request = compute.SetTargetForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2968,7 +4722,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_labels_unary( + client.set_target( request, metadata=[ ("key", "val"), @@ -2980,8 +4734,8 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_labels_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetLabelsForwardingRuleRequest +def test_set_target_rest_bad_request( + transport: str = "rest", request_type=compute.SetTargetForwardingRuleRequest ): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2989,11 +4743,12 @@ def test_set_labels_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} - request_init["region_set_labels_request_resource"] = { - "label_fingerprint": "label_fingerprint_value", - "labels": {}, + request_init = { + "project": "sample1", + "region": "sample2", + "forwarding_rule": "sample3", } + request_init["target_reference_resource"] = {"target": "target_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3005,10 +4760,10 @@ def test_set_labels_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_labels_unary(request) + client.set_target(request) -def test_set_labels_unary_rest_flattened(): +def test_set_target_rest_flattened(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3023,17 +4778,15 @@ def test_set_labels_unary_rest_flattened(): sample_request = { "project": "sample1", "region": "sample2", - "resource": "sample3", + "forwarding_rule": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", - region_set_labels_request_resource=compute.RegionSetLabelsRequest( - label_fingerprint="label_fingerprint_value" - ), + forwarding_rule="forwarding_rule_value", + target_reference_resource=compute.TargetReference(target="target_value"), ) mock_args.update(sample_request) @@ -3045,20 +4798,20 @@ def test_set_labels_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_labels_unary(**mock_args) + client.set_target(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{resource}/setLabels" + "%s/compute/v1/projects/{project}/regions/{region}/forwardingRules/{forwarding_rule}/setTarget" % client.transport._host, args[1], ) -def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): +def test_set_target_rest_flattened_error(transport: str = "rest"): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3067,18 +4820,16 @@ def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_labels_unary( - compute.SetLabelsForwardingRuleRequest(), + client.set_target( + compute.SetTargetForwardingRuleRequest(), project="project_value", region="region_value", - resource="resource_value", - region_set_labels_request_resource=compute.RegionSetLabelsRequest( - label_fingerprint="label_fingerprint_value" - ), + forwarding_rule="forwarding_rule_value", + target_reference_resource=compute.TargetReference(target="target_value"), ) -def test_set_labels_unary_rest_error(): +def test_set_target_rest_error(): client = ForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3144,28 +4895,6 @@ def test_set_target_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_target_unary_rest_required_fields( @@ -3497,6 +5226,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ForwardingRulesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_forwarding_rules_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3535,6 +5277,14 @@ def test_forwarding_rules_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_forwarding_rules_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_global_addresses.py b/tests/unit/gapic/compute_v1/test_global_addresses.py index a0329ea6d..ce144b407 100644 --- a/tests/unit/gapic/compute_v1/test_global_addresses.py +++ b/tests/unit/gapic/compute_v1/test_global_addresses.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -539,7 +541,7 @@ def test_global_addresses_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -583,10 +585,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -611,9 +613,599 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteGlobalAddressRequest, +def test_delete_rest_required_fields(request_type=compute.DeleteGlobalAddressRequest): + transport_class = transports.GlobalAddressesRestTransport + + request_init = {} + request_init["address"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["address"] = "address_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "address" in jsonified_request + assert jsonified_request["address"] == "address_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_rest_unset_required_fields(): + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "address", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalAddressesRestInterceptor(), + ) + client = GlobalAddressesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalAddressesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.GlobalAddressesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteGlobalAddressRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteGlobalAddressRequest ): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "address": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "address": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + address="address_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/addresses/{address}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteGlobalAddressRequest(), + project="project_value", + address="address_value", + ) + + +def test_delete_rest_error(): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteGlobalAddressRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "address": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteGlobalAddressRequest, +): + transport_class = transports.GlobalAddressesRestTransport + + request_init = {} + request_init["address"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["address"] = "address_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "address" in jsonified_request + assert jsonified_request["address"] == "address_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "address", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalAddressesRestInterceptor(), + ) + client = GlobalAddressesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalAddressesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.GlobalAddressesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteGlobalAddressRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteGlobalAddressRequest +): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "address": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "address": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + address="address_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/addresses/{address}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteGlobalAddressRequest(), + project="project_value", + address="address_value", + ) + + +def test_delete_unary_rest_error(): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetGlobalAddressRequest, + dict, + ], +) +def test_get_rest(request_type): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "address": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Address( + address="address_value", + address_type="address_type_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + ip_version="ip_version_value", + kind="kind_value", + name="name_value", + network="network_value", + network_tier="network_tier_value", + prefix_length=1391, + purpose="purpose_value", + region="region_value", + self_link="self_link_value", + status="status_value", + subnetwork="subnetwork_value", + users=["users_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Address.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Address) + assert response.address == "address_value" + assert response.address_type == "address_type_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.ip_version == "ip_version_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.network_tier == "network_tier_value" + assert response.prefix_length == 1391 + assert response.purpose == "purpose_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.status == "status_value" + assert response.subnetwork == "subnetwork_value" + assert response.users == ["users_value"] + + +def test_get_rest_required_fields(request_type=compute.GetGlobalAddressRequest): transport_class = transports.GlobalAddressesRestTransport request_init = {} @@ -630,7 +1222,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -640,9 +1232,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -658,7 +1248,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Address() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -669,32 +1259,32 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Address.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.GlobalAddressesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "address", @@ -705,7 +1295,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.GlobalAddressesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -718,9 +1308,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalAddressesRestInterceptor, "post_delete" + transports.GlobalAddressesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.GlobalAddressesRestInterceptor, "pre_delete" + transports.GlobalAddressesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -735,17 +1325,17 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Address.to_json(compute.Address()) - request = compute.DeleteGlobalAddressRequest() + request = compute.GetGlobalAddressRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Address - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -757,8 +1347,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteGlobalAddressRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetGlobalAddressRequest ): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -778,10 +1368,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -790,7 +1380,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Address() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "address": "sample2"} @@ -805,12 +1395,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Address.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -823,7 +1413,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -832,14 +1422,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteGlobalAddressRequest(), + client.get( + compute.GetGlobalAddressRequest(), project="project_value", address="address_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -848,77 +1438,105 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetGlobalAddressRequest, + compute.InsertGlobalAddressRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "address": "sample2"} + request_init = {"project": "sample1"} + request_init["address_resource"] = { + "address": "address_value", + "address_type": "address_type_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "ip_version": "ip_version_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "prefix_length": 1391, + "purpose": "purpose_value", + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + "subnetwork": "subnetwork_value", + "users": ["users_value_1", "users_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Address( - address="address_value", - address_type="address_type_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_version="ip_version_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - network_tier="network_tier_value", - prefix_length=1391, - purpose="purpose_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", - subnetwork="subnetwork_value", - users=["users_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Address.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Address) - assert response.address == "address_value" - assert response.address_type == "address_type_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.ip_version == "ip_version_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_tier == "network_tier_value" - assert response.prefix_length == 1391 - assert response.purpose == "purpose_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.status == "status_value" - assert response.subnetwork == "subnetwork_value" - assert response.users == ["users_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetGlobalAddressRequest): +def test_insert_rest_required_fields(request_type=compute.InsertGlobalAddressRequest): transport_class = transports.GlobalAddressesRestTransport request_init = {} - request_init["address"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -931,22 +1549,21 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalAddressRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["address"] = "address_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "address" in jsonified_request - assert jsonified_request["address"] == "address_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -957,7 +1574,7 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalAddressRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Address() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -968,35 +1585,36 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalAddressRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Address.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.GlobalAddressesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "address", + "addressResource", "project", ) ) @@ -1004,7 +1622,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.GlobalAddressesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1017,9 +1635,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalAddressesRestInterceptor, "post_get" + transports.GlobalAddressesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.GlobalAddressesRestInterceptor, "pre_get" + transports.GlobalAddressesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1034,17 +1652,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Address.to_json(compute.Address()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetGlobalAddressRequest() + request = compute.InsertGlobalAddressRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Address + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1056,8 +1674,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetGlobalAddressRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertGlobalAddressRequest ): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1065,7 +1683,26 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "address": "sample2"} + request_init = {"project": "sample1"} + request_init["address_resource"] = { + "address": "address_value", + "address_type": "address_type_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "ip_version": "ip_version_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "prefix_length": 1391, + "purpose": "purpose_value", + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + "subnetwork": "subnetwork_value", + "users": ["users_value_1", "users_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1077,10 +1714,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1089,40 +1726,40 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Address() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "address": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - address="address_value", + address_resource=compute.Address(address="address_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Address.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/addresses/{address}" + "%s/compute/v1/projects/{project}/global/addresses" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1131,14 +1768,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetGlobalAddressRequest(), + client.insert( + compute.InsertGlobalAddressRequest(), project="project_value", - address="address_value", + address_resource=compute.Address(address="address_value"), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1218,28 +1855,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -1902,6 +2517,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = GlobalAddressesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_global_addresses_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1936,6 +2564,14 @@ def test_global_addresses_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_global_addresses_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_global_forwarding_rules.py b/tests/unit/gapic/compute_v1/test_global_forwarding_rules.py index 1af015d1f..2dbaf292d 100644 --- a/tests/unit/gapic/compute_v1/test_global_forwarding_rules.py +++ b/tests/unit/gapic/compute_v1/test_global_forwarding_rules.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -555,7 +557,7 @@ def test_global_forwarding_rules_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -599,10 +601,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -627,7 +629,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteGlobalForwardingRuleRequest, ): transport_class = transports.GlobalForwardingRulesRestTransport @@ -696,14 +698,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -721,7 +723,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -761,7 +763,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -773,7 +775,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteGlobalForwardingRuleRequest ): client = GlobalForwardingRulesClient( @@ -794,10 +796,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -826,7 +828,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -839,7 +841,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -848,14 +850,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteGlobalForwardingRuleRequest(), project="project_value", forwarding_rule="forwarding_rule_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -864,11 +866,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetGlobalForwardingRuleRequest, + compute.DeleteGlobalForwardingRuleRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -881,76 +883,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRule( - I_p_address="I_p_address_value", - I_p_protocol="I_p_protocol_value", - all_ports=True, - allow_global_access=True, - backend_service="backend_service_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_version="ip_version_value", - is_mirroring_collector=True, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", - load_balancing_scheme="load_balancing_scheme_value", name="name_value", - network="network_value", - network_tier="network_tier_value", - port_range="port_range_value", - ports=["ports_value"], - psc_connection_id=1793, - psc_connection_status="psc_connection_status_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - service_label="service_label_value", - service_name="service_name_value", - subnetwork="subnetwork_value", - target="target_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.ForwardingRule) - assert response.I_p_address == "I_p_address_value" - assert response.I_p_protocol == "I_p_protocol_value" - assert response.all_ports is True - assert response.allow_global_access is True - assert response.backend_service == "backend_service_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.ip_version == "ip_version_value" - assert response.is_mirroring_collector is True - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.load_balancing_scheme == "load_balancing_scheme_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_tier == "network_tier_value" - assert response.port_range == "port_range_value" - assert response.ports == ["ports_value"] - assert response.psc_connection_id == 1793 - assert response.psc_connection_status == "psc_connection_status_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.service_label == "service_label_value" - assert response.service_name == "service_name_value" - assert response.subnetwork == "subnetwork_value" - assert response.target == "target_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetGlobalForwardingRuleRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteGlobalForwardingRuleRequest, +): transport_class = transports.GlobalForwardingRulesRestTransport request_init = {} @@ -967,7 +939,7 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalForwardingRuleRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -977,7 +949,9 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalForwardingRuleRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -993,7 +967,7 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalForwardingRuleRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRule() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1004,32 +978,32 @@ def test_get_rest_required_fields(request_type=compute.GetGlobalForwardingRuleRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "forwardingRule", @@ -1040,7 +1014,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1053,9 +1027,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "post_get" + transports.GlobalForwardingRulesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "pre_get" + transports.GlobalForwardingRulesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1070,19 +1044,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ForwardingRule.to_json( - compute.ForwardingRule() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetGlobalForwardingRuleRequest() + request = compute.DeleteGlobalForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRule + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1094,8 +1066,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetGlobalForwardingRuleRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteGlobalForwardingRuleRequest ): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1115,10 +1087,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1127,7 +1099,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRule() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "forwarding_rule": "sample2"} @@ -1142,12 +1114,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1160,7 +1132,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1169,14 +1141,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetGlobalForwardingRuleRequest(), + client.delete_unary( + compute.DeleteGlobalForwardingRuleRequest(), project="project_value", forwarding_rule="forwarding_rule_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1185,131 +1157,97 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertGlobalForwardingRuleRequest, + compute.GetGlobalForwardingRuleRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["forwarding_rule_resource"] = { - "I_p_address": "I_p_address_value", - "I_p_protocol": "I_p_protocol_value", - "all_ports": True, - "allow_global_access": True, - "backend_service": "backend_service_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_version": "ip_version_value", - "is_mirroring_collector": True, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "load_balancing_scheme": "load_balancing_scheme_value", - "metadata_filters": [ - { - "filter_labels": [{"name": "name_value", "value": "value_value"}], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "name": "name_value", - "network": "network_value", - "network_tier": "network_tier_value", - "port_range": "port_range_value", - "ports": ["ports_value_1", "ports_value_2"], - "psc_connection_id": 1793, - "psc_connection_status": "psc_connection_status_value", - "region": "region_value", - "self_link": "self_link_value", - "service_directory_registrations": [ - { - "namespace": "namespace_value", - "service": "service_value", - "service_directory_region": "service_directory_region_value", - } - ], - "service_label": "service_label_value", - "service_name": "service_name_value", - "subnetwork": "subnetwork_value", - "target": "target_value", - } + request_init = {"project": "sample1", "forwarding_rule": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.ForwardingRule( + I_p_address="I_p_address_value", + I_p_protocol="I_p_protocol_value", + all_ports=True, + allow_global_access=True, + backend_service="backend_service_value", creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + ip_version="ip_version_value", + is_mirroring_collector=True, kind="kind_value", + label_fingerprint="label_fingerprint_value", + load_balancing_scheme="load_balancing_scheme_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + network="network_value", + network_tier="network_tier_value", + port_range="port_range_value", + ports=["ports_value"], + psc_connection_id=1793, + psc_connection_status="psc_connection_status_value", region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + service_label="service_label_value", + service_name="service_name_value", + subnetwork="subnetwork_value", + target="target_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ForwardingRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.ForwardingRule) + assert response.I_p_address == "I_p_address_value" + assert response.I_p_protocol == "I_p_protocol_value" + assert response.all_ports is True + assert response.allow_global_access is True + assert response.backend_service == "backend_service_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.ip_version == "ip_version_value" + assert response.is_mirroring_collector is True assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.load_balancing_scheme == "load_balancing_scheme_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.network == "network_value" + assert response.network_tier == "network_tier_value" + assert response.port_range == "port_range_value" + assert response.ports == ["ports_value"] + assert response.psc_connection_id == 1793 + assert response.psc_connection_status == "psc_connection_status_value" assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.service_label == "service_label_value" + assert response.service_name == "service_name_value" + assert response.subnetwork == "subnetwork_value" + assert response.target == "target_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertGlobalForwardingRuleRequest, -): +def test_get_rest_required_fields(request_type=compute.GetGlobalForwardingRuleRequest): transport_class = transports.GlobalForwardingRulesRestTransport request_init = {} + request_init["forwarding_rule"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1322,21 +1260,22 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["forwardingRule"] = "forwarding_rule_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1347,7 +1286,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.ForwardingRule() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1358,36 +1297,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ForwardingRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "forwardingRuleResource", + "forwardingRule", "project", ) ) @@ -1395,7 +1333,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1408,9 +1346,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "post_insert" + transports.GlobalForwardingRulesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "pre_insert" + transports.GlobalForwardingRulesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1425,17 +1363,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.ForwardingRule.to_json( + compute.ForwardingRule() + ) - request = compute.InsertGlobalForwardingRuleRequest() + request = compute.GetGlobalForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.ForwardingRule - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1447,8 +1387,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertGlobalForwardingRuleRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetGlobalForwardingRuleRequest ): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1456,50 +1396,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["forwarding_rule_resource"] = { - "I_p_address": "I_p_address_value", - "I_p_protocol": "I_p_protocol_value", - "all_ports": True, - "allow_global_access": True, - "backend_service": "backend_service_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_version": "ip_version_value", - "is_mirroring_collector": True, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "load_balancing_scheme": "load_balancing_scheme_value", - "metadata_filters": [ - { - "filter_labels": [{"name": "name_value", "value": "value_value"}], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "name": "name_value", - "network": "network_value", - "network_tier": "network_tier_value", - "port_range": "port_range_value", - "ports": ["ports_value_1", "ports_value_2"], - "psc_connection_id": 1793, - "psc_connection_status": "psc_connection_status_value", - "region": "region_value", - "self_link": "self_link_value", - "service_directory_registrations": [ - { - "namespace": "namespace_value", - "service": "service_value", - "service_directory_region": "service_directory_region_value", - } - ], - "service_label": "service_label_value", - "service_name": "service_name_value", - "subnetwork": "subnetwork_value", - "target": "target_value", - } + request_init = {"project": "sample1", "forwarding_rule": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1511,10 +1408,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1523,42 +1420,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.ForwardingRule() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "forwarding_rule": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" - ), + forwarding_rule="forwarding_rule_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.ForwardingRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/forwardingRules" + "%s/compute/v1/projects/{project}/global/forwardingRules/{forwarding_rule}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1567,16 +1462,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertGlobalForwardingRuleRequest(), + client.get( + compute.GetGlobalForwardingRuleRequest(), project="project_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" - ), + forwarding_rule="forwarding_rule_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1585,11 +1478,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListGlobalForwardingRulesRequest, + compute.InsertGlobalForwardingRuleRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1597,36 +1490,115 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRuleList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRuleList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListGlobalForwardingRulesRequest, +def test_insert_rest_required_fields( + request_type=compute.InsertGlobalForwardingRuleRequest, ): transport_class = transports.GlobalForwardingRulesRestTransport @@ -1643,7 +1615,7 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1652,17 +1624,9 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1676,7 +1640,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRuleList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1687,46 +1651,44 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRuleList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "forwardingRuleResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1739,9 +1701,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "post_list" + transports.GlobalForwardingRulesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "pre_list" + transports.GlobalForwardingRulesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1756,19 +1718,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ForwardingRuleList.to_json( - compute.ForwardingRuleList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListGlobalForwardingRulesRequest() + request = compute.InsertGlobalForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRuleList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -1780,8 +1740,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListGlobalForwardingRulesRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertGlobalForwardingRuleRequest ): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1790,6 +1750,49 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1801,10 +1804,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1813,7 +1816,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ForwardingRuleList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1821,18 +1824,21 @@ def test_list_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ForwardingRuleList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1845,7 +1851,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1854,88 +1860,36 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListGlobalForwardingRulesRequest(), + client.insert( + compute.InsertGlobalForwardingRuleRequest(), project="project_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): client = GlobalForwardingRulesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ForwardingRuleList( - items=[ - compute.ForwardingRule(), - compute.ForwardingRule(), - compute.ForwardingRule(), - ], - next_page_token="abc", - ), - compute.ForwardingRuleList( - items=[], - next_page_token="def", - ), - compute.ForwardingRuleList( - items=[ - compute.ForwardingRule(), - ], - next_page_token="ghi", - ), - compute.ForwardingRuleList( - items=[ - compute.ForwardingRule(), - compute.ForwardingRule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ForwardingRuleList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ForwardingRule) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchGlobalForwardingRuleRequest, + compute.InsertGlobalForwardingRuleRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_insert_unary_rest(request_type): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init = {"project": "sample1"} request_init["forwarding_rule_resource"] = { "I_p_address": "I_p_address_value", "I_p_protocol": "I_p_protocol_value", @@ -2015,42 +1969,1817 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertGlobalForwardingRuleRequest, +): + transport_class = transports.GlobalForwardingRulesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "forwardingRuleResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalForwardingRulesRestInterceptor(), + ) + client = GlobalForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertGlobalForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertGlobalForwardingRuleRequest +): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/forwardingRules" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertGlobalForwardingRuleRequest(), + project="project_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListGlobalForwardingRulesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ForwardingRuleList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ForwardingRuleList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListGlobalForwardingRulesRequest, +): + transport_class = transports.GlobalForwardingRulesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ForwardingRuleList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ForwardingRuleList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalForwardingRulesRestInterceptor(), + ) + client = GlobalForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ForwardingRuleList.to_json( + compute.ForwardingRuleList() + ) + + request = compute.ListGlobalForwardingRulesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ForwardingRuleList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListGlobalForwardingRulesRequest +): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ForwardingRuleList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ForwardingRuleList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/forwardingRules" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListGlobalForwardingRulesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ForwardingRuleList( + items=[ + compute.ForwardingRule(), + compute.ForwardingRule(), + compute.ForwardingRule(), + ], + next_page_token="abc", + ), + compute.ForwardingRuleList( + items=[], + next_page_token="def", + ), + compute.ForwardingRuleList( + items=[ + compute.ForwardingRule(), + ], + next_page_token="ghi", + ), + compute.ForwardingRuleList( + items=[ + compute.ForwardingRule(), + compute.ForwardingRule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ForwardingRuleList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ForwardingRule) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchGlobalForwardingRuleRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchGlobalForwardingRuleRequest, +): + transport_class = transports.GlobalForwardingRulesRestTransport + + request_init = {} + request_init["forwarding_rule"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["forwardingRule"] = "forwarding_rule_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "forwardingRule", + "forwardingRuleResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalForwardingRulesRestInterceptor(), + ) + client = GlobalForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchGlobalForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchGlobalForwardingRuleRequest +): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "forwarding_rule": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/forwardingRules/{forwarding_rule}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchGlobalForwardingRuleRequest(), + project="project_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + + +def test_patch_rest_error(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchGlobalForwardingRuleRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchGlobalForwardingRuleRequest, +): + transport_class = transports.GlobalForwardingRulesRestTransport + + request_init = {} + request_init["forwarding_rule"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["forwardingRule"] = "forwarding_rule_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "forwardingRule", + "forwardingRuleResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalForwardingRulesRestInterceptor(), + ) + client = GlobalForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchGlobalForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchGlobalForwardingRuleRequest +): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init["forwarding_rule_resource"] = { + "I_p_address": "I_p_address_value", + "I_p_protocol": "I_p_protocol_value", + "all_ports": True, + "allow_global_access": True, + "backend_service": "backend_service_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_version": "ip_version_value", + "is_mirroring_collector": True, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "load_balancing_scheme": "load_balancing_scheme_value", + "metadata_filters": [ + { + "filter_labels": [{"name": "name_value", "value": "value_value"}], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "name": "name_value", + "network": "network_value", + "network_tier": "network_tier_value", + "port_range": "port_range_value", + "ports": ["ports_value_1", "ports_value_2"], + "psc_connection_id": 1793, + "psc_connection_status": "psc_connection_status_value", + "region": "region_value", + "self_link": "self_link_value", + "service_directory_registrations": [ + { + "namespace": "namespace_value", + "service": "service_value", + "service_directory_region": "service_directory_region_value", + } + ], + "service_label": "service_label_value", + "service_name": "service_name_value", + "subnetwork": "subnetwork_value", + "target": "target_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "forwarding_rule": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/forwardingRules/{forwarding_rule}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchGlobalForwardingRuleRequest(), + project="project_value", + forwarding_rule="forwarding_rule_value", + forwarding_rule_resource=compute.ForwardingRule( + I_p_address="I_p_address_value" + ), + ) + + +def test_patch_unary_rest_error(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsGlobalForwardingRuleRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_labels(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsGlobalForwardingRuleRequest, +): + transport_class = transports.GlobalForwardingRulesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_labels(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_labels_rest_unset_required_fields(): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_labels._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "globalSetLabelsRequestResource", + "project", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_labels_rest_interceptors(null_interceptor): + transport = transports.GlobalForwardingRulesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalForwardingRulesRestInterceptor(), + ) + client = GlobalForwardingRulesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "post_set_labels" + ) as post, mock.patch.object( + transports.GlobalForwardingRulesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetLabelsGlobalForwardingRuleRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_labels( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsGlobalForwardingRuleRequest +): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_labels(request) + + +def test_set_labels_rest_flattened(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "resource": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_labels(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/forwardingRules/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_rest_flattened_error(transport: str = "rest"): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_labels( + compute.SetLabelsGlobalForwardingRuleRequest(), + project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_rest_error(): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsGlobalForwardingRuleRequest, + dict, + ], +) +def test_set_labels_unary_rest(request_type): + client = GlobalForwardingRulesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_labels_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchGlobalForwardingRuleRequest, +def test_set_labels_unary_rest_required_fields( + request_type=compute.SetLabelsGlobalForwardingRuleRequest, ): transport_class = transports.GlobalForwardingRulesRestTransport request_init = {} - request_init["forwarding_rule"] = "" request_init["project"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2062,26 +3791,24 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["forwardingRule"] = "forwarding_rule_value" jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "forwardingRule" in jsonified_request - assert jsonified_request["forwardingRule"] == "forwarding_rule_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2101,7 +3828,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2113,33 +3840,33 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_labels_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_labels_unary_rest_unset_required_fields(): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "forwardingRule", - "forwardingRuleResource", + "globalSetLabelsRequestResource", "project", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_labels_unary_rest_interceptors(null_interceptor): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2152,9 +3879,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "post_patch" + transports.GlobalForwardingRulesRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "pre_patch" + transports.GlobalForwardingRulesRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2171,7 +3898,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchGlobalForwardingRuleRequest() + request = compute.SetLabelsGlobalForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2179,7 +3906,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.set_labels_unary( request, metadata=[ ("key", "val"), @@ -2191,8 +3918,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchGlobalForwardingRuleRequest +def test_set_labels_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsGlobalForwardingRuleRequest ): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2200,49 +3927,10 @@ def test_patch_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "forwarding_rule": "sample2"} - request_init["forwarding_rule_resource"] = { - "I_p_address": "I_p_address_value", - "I_p_protocol": "I_p_protocol_value", - "all_ports": True, - "allow_global_access": True, - "backend_service": "backend_service_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_version": "ip_version_value", - "is_mirroring_collector": True, - "kind": "kind_value", + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { "label_fingerprint": "label_fingerprint_value", "labels": {}, - "load_balancing_scheme": "load_balancing_scheme_value", - "metadata_filters": [ - { - "filter_labels": [{"name": "name_value", "value": "value_value"}], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "name": "name_value", - "network": "network_value", - "network_tier": "network_tier_value", - "port_range": "port_range_value", - "ports": ["ports_value_1", "ports_value_2"], - "psc_connection_id": 1793, - "psc_connection_status": "psc_connection_status_value", - "region": "region_value", - "self_link": "self_link_value", - "service_directory_registrations": [ - { - "namespace": "namespace_value", - "service": "service_value", - "service_directory_region": "service_directory_region_value", - } - ], - "service_label": "service_label_value", - "service_name": "service_name_value", - "subnetwork": "subnetwork_value", - "target": "target_value", } request = request_type(request_init) @@ -2255,10 +3943,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_labels_unary(request) -def test_patch_unary_rest_flattened(): +def test_set_labels_unary_rest_flattened(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2270,14 +3958,14 @@ def test_patch_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "forwarding_rule": "sample2"} + sample_request = {"project": "sample1", "resource": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - forwarding_rule="forwarding_rule_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) mock_args.update(sample_request) @@ -2290,20 +3978,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_labels_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/forwardingRules/{forwarding_rule}" + "%s/compute/v1/projects/{project}/global/forwardingRules/{resource}/setLabels" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2312,17 +4000,17 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchGlobalForwardingRuleRequest(), + client.set_labels_unary( + compute.SetLabelsGlobalForwardingRuleRequest(), project="project_value", - forwarding_rule="forwarding_rule_value", - forwarding_rule_resource=compute.ForwardingRule( - I_p_address="I_p_address_value" + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) -def test_patch_unary_rest_error(): +def test_set_labels_unary_rest_error(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2331,22 +4019,19 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetLabelsGlobalForwardingRuleRequest, + compute.SetTargetGlobalForwardingRuleRequest, dict, ], ) -def test_set_labels_unary_rest(request_type): +def test_set_target_rest(request_type): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} - request_init["global_set_labels_request_resource"] = { - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - } + request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init["target_reference_resource"] = {"target": "target_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2383,10 +4068,10 @@ def test_set_labels_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_labels_unary(request) + response = client.set_target(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2411,14 +4096,14 @@ def test_set_labels_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_labels_unary_rest_required_fields( - request_type=compute.SetLabelsGlobalForwardingRuleRequest, +def test_set_target_rest_required_fields( + request_type=compute.SetTargetGlobalForwardingRuleRequest, ): transport_class = transports.GlobalForwardingRulesRestTransport request_init = {} + request_init["forwarding_rule"] = "" request_init["project"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2430,24 +4115,26 @@ def test_set_labels_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_labels._get_unset_required_fields(jsonified_request) + ).set_target._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["forwardingRule"] = "forwarding_rule_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_labels._get_unset_required_fields(jsonified_request) + ).set_target._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "forwardingRule" in jsonified_request + assert jsonified_request["forwardingRule"] == "forwarding_rule_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2479,33 +4166,33 @@ def test_set_labels_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_labels_unary(request) + response = client.set_target(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_labels_unary_rest_unset_required_fields(): +def test_set_target_rest_unset_required_fields(): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_labels._get_unset_required_fields({}) + unset_fields = transport.set_target._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "globalSetLabelsRequestResource", + "forwardingRule", "project", - "resource", + "targetReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_labels_unary_rest_interceptors(null_interceptor): +def test_set_target_rest_interceptors(null_interceptor): transport = transports.GlobalForwardingRulesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2518,9 +4205,9 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "post_set_labels" + transports.GlobalForwardingRulesRestInterceptor, "post_set_target" ) as post, mock.patch.object( - transports.GlobalForwardingRulesRestInterceptor, "pre_set_labels" + transports.GlobalForwardingRulesRestInterceptor, "pre_set_target" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2537,7 +4224,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetLabelsGlobalForwardingRuleRequest() + request = compute.SetTargetGlobalForwardingRuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2545,7 +4232,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_labels_unary( + client.set_target( request, metadata=[ ("key", "val"), @@ -2557,8 +4244,8 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_labels_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetLabelsGlobalForwardingRuleRequest +def test_set_target_rest_bad_request( + transport: str = "rest", request_type=compute.SetTargetGlobalForwardingRuleRequest ): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2566,11 +4253,8 @@ def test_set_labels_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} - request_init["global_set_labels_request_resource"] = { - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - } + request_init = {"project": "sample1", "forwarding_rule": "sample2"} + request_init["target_reference_resource"] = {"target": "target_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2582,10 +4266,10 @@ def test_set_labels_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_labels_unary(request) + client.set_target(request) -def test_set_labels_unary_rest_flattened(): +def test_set_target_rest_flattened(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2597,15 +4281,13 @@ def test_set_labels_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1", "forwarding_rule": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", - global_set_labels_request_resource=compute.GlobalSetLabelsRequest( - label_fingerprint="label_fingerprint_value" - ), + forwarding_rule="forwarding_rule_value", + target_reference_resource=compute.TargetReference(target="target_value"), ) mock_args.update(sample_request) @@ -2617,20 +4299,20 @@ def test_set_labels_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_labels_unary(**mock_args) + client.set_target(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/forwardingRules/{resource}/setLabels" + "%s/compute/v1/projects/{project}/global/forwardingRules/{forwarding_rule}/setTarget" % client.transport._host, args[1], ) -def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): +def test_set_target_rest_flattened_error(transport: str = "rest"): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2639,17 +4321,15 @@ def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_labels_unary( - compute.SetLabelsGlobalForwardingRuleRequest(), + client.set_target( + compute.SetTargetGlobalForwardingRuleRequest(), project="project_value", - resource="resource_value", - global_set_labels_request_resource=compute.GlobalSetLabelsRequest( - label_fingerprint="label_fingerprint_value" - ), + forwarding_rule="forwarding_rule_value", + target_reference_resource=compute.TargetReference(target="target_value"), ) -def test_set_labels_unary_rest_error(): +def test_set_target_rest_error(): client = GlobalForwardingRulesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2711,28 +4391,6 @@ def test_set_target_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_target_unary_rest_required_fields( @@ -3049,6 +4707,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = GlobalForwardingRulesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_global_forwarding_rules_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3086,6 +4757,14 @@ def test_global_forwarding_rules_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_global_forwarding_rules_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_global_network_endpoint_groups.py b/tests/unit/gapic/compute_v1/test_global_network_endpoint_groups.py index f0497108c..3d3f80e2e 100644 --- a/tests/unit/gapic/compute_v1/test_global_network_endpoint_groups.py +++ b/tests/unit/gapic/compute_v1/test_global_network_endpoint_groups.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -563,7 +565,7 @@ def test_global_network_endpoint_groups_client_client_options_credentials_file( dict, ], ) -def test_attach_network_endpoints_unary_rest(request_type): +def test_attach_network_endpoints_rest(request_type): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -618,10 +620,10 @@ def test_attach_network_endpoints_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.attach_network_endpoints_unary(request) + response = client.attach_network_endpoints(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -646,7 +648,7 @@ def test_attach_network_endpoints_unary_rest(request_type): assert response.zone == "zone_value" -def test_attach_network_endpoints_unary_rest_required_fields( +def test_attach_network_endpoints_rest_required_fields( request_type=compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, ): transport_class = transports.GlobalNetworkEndpointGroupsRestTransport @@ -716,14 +718,14 @@ def test_attach_network_endpoints_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.attach_network_endpoints_unary(request) + response = client.attach_network_endpoints(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_attach_network_endpoints_unary_rest_unset_required_fields(): +def test_attach_network_endpoints_rest_unset_required_fields(): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -742,7 +744,7 @@ def test_attach_network_endpoints_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): +def test_attach_network_endpoints_rest_interceptors(null_interceptor): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -784,7 +786,7 @@ def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.attach_network_endpoints_unary( + client.attach_network_endpoints( request, metadata=[ ("key", "val"), @@ -796,7 +798,7 @@ def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_attach_network_endpoints_unary_rest_bad_request( +def test_attach_network_endpoints_rest_bad_request( transport: str = "rest", request_type=compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, ): @@ -829,10 +831,10 @@ def test_attach_network_endpoints_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.attach_network_endpoints_unary(request) + client.attach_network_endpoints(request) -def test_attach_network_endpoints_unary_rest_flattened(): +def test_attach_network_endpoints_rest_flattened(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -866,7 +868,7 @@ def test_attach_network_endpoints_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.attach_network_endpoints_unary(**mock_args) + client.attach_network_endpoints(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -879,7 +881,7 @@ def test_attach_network_endpoints_unary_rest_flattened(): ) -def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): +def test_attach_network_endpoints_rest_flattened_error(transport: str = "rest"): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -888,7 +890,7 @@ def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.attach_network_endpoints_unary( + client.attach_network_endpoints( compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest(), project="project_value", network_endpoint_group="network_endpoint_group_value", @@ -900,7 +902,7 @@ def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "r ) -def test_attach_network_endpoints_unary_rest_error(): +def test_attach_network_endpoints_rest_error(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -909,11 +911,11 @@ def test_attach_network_endpoints_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteGlobalNetworkEndpointGroupRequest, + compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_attach_network_endpoints_unary_rest(request_type): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -921,6 +923,17 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init["global_network_endpoint_groups_attach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -957,36 +970,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.attach_network_endpoints_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteGlobalNetworkEndpointGroupRequest, +def test_attach_network_endpoints_unary_rest_required_fields( + request_type=compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, ): transport_class = transports.GlobalNetworkEndpointGroupsRestTransport @@ -1004,7 +995,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).attach_network_endpoints._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1014,7 +1005,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).attach_network_endpoints._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1043,9 +1034,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1054,23 +1046,24 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.attach_network_endpoints_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_attach_network_endpoints_unary_rest_unset_required_fields(): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.attach_network_endpoints._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( + "globalNetworkEndpointGroupsAttachEndpointsRequestResource", "networkEndpointGroup", "project", ) @@ -1079,7 +1072,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1092,9 +1085,11 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalNetworkEndpointGroupsRestInterceptor, "post_delete" + transports.GlobalNetworkEndpointGroupsRestInterceptor, + "post_attach_network_endpoints", ) as post, mock.patch.object( - transports.GlobalNetworkEndpointGroupsRestInterceptor, "pre_delete" + transports.GlobalNetworkEndpointGroupsRestInterceptor, + "pre_attach_network_endpoints", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1111,7 +1106,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteGlobalNetworkEndpointGroupRequest() + request = compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1119,7 +1114,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.attach_network_endpoints_unary( request, metadata=[ ("key", "val"), @@ -1131,9 +1126,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_attach_network_endpoints_unary_rest_bad_request( transport: str = "rest", - request_type=compute.DeleteGlobalNetworkEndpointGroupRequest, + request_type=compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest, ): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1142,6 +1137,17 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init["global_network_endpoint_groups_attach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1153,10 +1159,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.attach_network_endpoints_unary(request) -def test_delete_unary_rest_flattened(): +def test_attach_network_endpoints_unary_rest_flattened(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1174,6 +1180,11 @@ def test_delete_unary_rest_flattened(): mock_args = dict( project="project_value", network_endpoint_group="network_endpoint_group_value", + global_network_endpoint_groups_attach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsAttachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), ) mock_args.update(sample_request) @@ -1185,20 +1196,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.attach_network_endpoints_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}" + "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}/attachNetworkEndpoints" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1207,14 +1218,19 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteGlobalNetworkEndpointGroupRequest(), + client.attach_network_endpoints_unary( + compute.AttachNetworkEndpointsGlobalNetworkEndpointGroupRequest(), project="project_value", network_endpoint_group="network_endpoint_group_value", + global_network_endpoint_groups_attach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsAttachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), ) -def test_delete_unary_rest_error(): +def test_attach_network_endpoints_unary_rest_error(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1223,11 +1239,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, + compute.DeleteGlobalNetworkEndpointGroupRequest, dict, ], ) -def test_detach_network_endpoints_unary_rest(request_type): +def test_delete_rest(request_type): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1235,17 +1251,6 @@ def test_detach_network_endpoints_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network_endpoint_group": "sample2"} - request_init["global_network_endpoint_groups_detach_endpoints_request_resource"] = { - "network_endpoints": [ - { - "annotations": {}, - "fqdn": "fqdn_value", - "instance": "instance_value", - "ip_address": "ip_address_value", - "port": 453, - } - ] - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1282,10 +1287,10 @@ def test_detach_network_endpoints_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.detach_network_endpoints_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1310,8 +1315,8 @@ def test_detach_network_endpoints_unary_rest(request_type): assert response.zone == "zone_value" -def test_detach_network_endpoints_unary_rest_required_fields( - request_type=compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, +def test_delete_rest_required_fields( + request_type=compute.DeleteGlobalNetworkEndpointGroupRequest, ): transport_class = transports.GlobalNetworkEndpointGroupsRestTransport @@ -1329,7 +1334,7 @@ def test_detach_network_endpoints_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1339,7 +1344,7 @@ def test_detach_network_endpoints_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1368,10 +1373,9 @@ def test_detach_network_endpoints_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1380,24 +1384,23 @@ def test_detach_network_endpoints_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.detach_network_endpoints_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_detach_network_endpoints_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.detach_network_endpoints._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "globalNetworkEndpointGroupsDetachEndpointsRequestResource", "networkEndpointGroup", "project", ) @@ -1406,7 +1409,7 @@ def test_detach_network_endpoints_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1419,11 +1422,9 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalNetworkEndpointGroupsRestInterceptor, - "post_detach_network_endpoints", + transports.GlobalNetworkEndpointGroupsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.GlobalNetworkEndpointGroupsRestInterceptor, - "pre_detach_network_endpoints", + transports.GlobalNetworkEndpointGroupsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1440,7 +1441,7 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest() + request = compute.DeleteGlobalNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1448,7 +1449,7 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.detach_network_endpoints_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1460,9 +1461,1276 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_detach_network_endpoints_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", - request_type=compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, + request_type=compute.DeleteGlobalNetworkEndpointGroupRequest, +): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network_endpoint_group": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network_endpoint_group="network_endpoint_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteGlobalNetworkEndpointGroupRequest(), + project="project_value", + network_endpoint_group="network_endpoint_group_value", + ) + + +def test_delete_rest_error(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteGlobalNetworkEndpointGroupRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteGlobalNetworkEndpointGroupRequest, +): + transport_class = transports.GlobalNetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkEndpointGroup", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalNetworkEndpointGroupsRestInterceptor(), + ) + client = GlobalNetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteGlobalNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteGlobalNetworkEndpointGroupRequest, +): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network_endpoint_group": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network_endpoint_group="network_endpoint_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteGlobalNetworkEndpointGroupRequest(), + project="project_value", + network_endpoint_group="network_endpoint_group_value", + ) + + +def test_delete_unary_rest_error(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, + dict, + ], +) +def test_detach_network_endpoints_rest(request_type): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init["global_network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.detach_network_endpoints(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_detach_network_endpoints_rest_required_fields( + request_type=compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, +): + transport_class = transports.GlobalNetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.detach_network_endpoints(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_detach_network_endpoints_rest_unset_required_fields(): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.detach_network_endpoints._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "globalNetworkEndpointGroupsDetachEndpointsRequestResource", + "networkEndpointGroup", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_detach_network_endpoints_rest_interceptors(null_interceptor): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalNetworkEndpointGroupsRestInterceptor(), + ) + client = GlobalNetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, + "post_detach_network_endpoints", + ) as post, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, + "pre_detach_network_endpoints", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.detach_network_endpoints( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_detach_network_endpoints_rest_bad_request( + transport: str = "rest", + request_type=compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, +): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init["global_network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.detach_network_endpoints(request) + + +def test_detach_network_endpoints_rest_flattened(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network_endpoint_group": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network_endpoint_group="network_endpoint_group_value", + global_network_endpoint_groups_detach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.detach_network_endpoints(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}/detachNetworkEndpoints" + % client.transport._host, + args[1], + ) + + +def test_detach_network_endpoints_rest_flattened_error(transport: str = "rest"): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.detach_network_endpoints( + compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest(), + project="project_value", + network_endpoint_group="network_endpoint_group_value", + global_network_endpoint_groups_detach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + + +def test_detach_network_endpoints_rest_error(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, + dict, + ], +) +def test_detach_network_endpoints_unary_rest(request_type): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init["global_network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.detach_network_endpoints_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_detach_network_endpoints_unary_rest_required_fields( + request_type=compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, +): + transport_class = transports.GlobalNetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.detach_network_endpoints_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_detach_network_endpoints_unary_rest_unset_required_fields(): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.detach_network_endpoints._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "globalNetworkEndpointGroupsDetachEndpointsRequestResource", + "networkEndpointGroup", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalNetworkEndpointGroupsRestInterceptor(), + ) + client = GlobalNetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, + "post_detach_network_endpoints", + ) as post, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, + "pre_detach_network_endpoints", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.detach_network_endpoints_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_detach_network_endpoints_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest, +): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init["global_network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.detach_network_endpoints_unary(request) + + +def test_detach_network_endpoints_unary_rest_flattened(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network_endpoint_group": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network_endpoint_group="network_endpoint_group_value", + global_network_endpoint_groups_detach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.detach_network_endpoints_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}/detachNetworkEndpoints" + % client.transport._host, + args[1], + ) + + +def test_detach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.detach_network_endpoints_unary( + compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest(), + project="project_value", + network_endpoint_group="network_endpoint_group_value", + global_network_endpoint_groups_detach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + + +def test_detach_network_endpoints_unary_rest_error(): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetGlobalNetworkEndpointGroupRequest, + dict, + ], +) +def test_get_rest(request_type): + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEndpointGroup( + creation_timestamp="creation_timestamp_value", + default_port=1289, + description="description_value", + id=205, + kind="kind_value", + name="name_value", + network="network_value", + network_endpoint_type="network_endpoint_type_value", + psc_target_service="psc_target_service_value", + region="region_value", + self_link="self_link_value", + size=443, + subnetwork="subnetwork_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NetworkEndpointGroup) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_port == 1289 + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.network_endpoint_type == "network_endpoint_type_value" + assert response.psc_target_service == "psc_target_service_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.size == 443 + assert response.subnetwork == "subnetwork_value" + assert response.zone == "zone_value" + + +def test_get_rest_required_fields( + request_type=compute.GetGlobalNetworkEndpointGroupRequest, +): + transport_class = transports.GlobalNetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEndpointGroup() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "networkEndpointGroup", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.GlobalNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalNetworkEndpointGroupsRestInterceptor(), + ) + client = GlobalNetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.GlobalNetworkEndpointGroupsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NetworkEndpointGroup.to_json( + compute.NetworkEndpointGroup() + ) + + request = compute.GetGlobalNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NetworkEndpointGroup + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetGlobalNetworkEndpointGroupRequest ): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1471,17 +2739,6 @@ def test_detach_network_endpoints_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network_endpoint_group": "sample2"} - request_init["global_network_endpoint_groups_detach_endpoints_request_resource"] = { - "network_endpoints": [ - { - "annotations": {}, - "fqdn": "fqdn_value", - "instance": "instance_value", - "ip_address": "ip_address_value", - "port": 453, - } - ] - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1493,10 +2750,10 @@ def test_detach_network_endpoints_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.detach_network_endpoints_unary(request) + client.get(request) -def test_detach_network_endpoints_unary_rest_flattened(): +def test_get_rest_flattened(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1505,7 +2762,7 @@ def test_detach_network_endpoints_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NetworkEndpointGroup() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "network_endpoint_group": "sample2"} @@ -1514,36 +2771,31 @@ def test_detach_network_endpoints_unary_rest_flattened(): mock_args = dict( project="project_value", network_endpoint_group="network_endpoint_group_value", - global_network_endpoint_groups_detach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest( - network_endpoints=[ - compute.NetworkEndpoint(annotations={"key_value": "value_value"}) - ] - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.detach_network_endpoints_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}/detachNetworkEndpoints" + "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}" % client.transport._host, args[1], ) -def test_detach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1552,19 +2804,14 @@ def test_detach_network_endpoints_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.detach_network_endpoints_unary( - compute.DetachNetworkEndpointsGlobalNetworkEndpointGroupRequest(), + client.get( + compute.GetGlobalNetworkEndpointGroupRequest(), project="project_value", network_endpoint_group="network_endpoint_group_value", - global_network_endpoint_groups_detach_endpoints_request_resource=compute.GlobalNetworkEndpointGroupsDetachEndpointsRequest( - network_endpoints=[ - compute.NetworkEndpoint(annotations={"key_value": "value_value"}) - ] - ), ) -def test_detach_network_endpoints_unary_rest_error(): +def test_get_rest_error(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1573,73 +2820,116 @@ def test_detach_network_endpoints_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetGlobalNetworkEndpointGroupRequest, + compute.InsertGlobalNetworkEndpointGroupRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init = {"project": "sample1"} + request_init["network_endpoint_group_resource"] = { + "annotations": {}, + "app_engine": { + "service": "service_value", + "url_mask": "url_mask_value", + "version": "version_value", + }, + "cloud_function": {"function": "function_value", "url_mask": "url_mask_value"}, + "cloud_run": { + "service": "service_value", + "tag": "tag_value", + "url_mask": "url_mask_value", + }, + "creation_timestamp": "creation_timestamp_value", + "default_port": 1289, + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_endpoint_type": "network_endpoint_type_value", + "psc_target_service": "psc_target_service_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_port=1289, description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - network_endpoint_type="network_endpoint_type_value", - psc_target_service="psc_target_service_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - size=443, - subnetwork="subnetwork_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NetworkEndpointGroup) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_port == 1289 assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_endpoint_type == "network_endpoint_type_value" - assert response.psc_target_service == "psc_target_service_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.size == 443 - assert response.subnetwork == "subnetwork_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields( - request_type=compute.GetGlobalNetworkEndpointGroupRequest, +def test_insert_rest_required_fields( + request_type=compute.InsertGlobalNetworkEndpointGroupRequest, ): transport_class = transports.GlobalNetworkEndpointGroupsRestTransport request_init = {} - request_init["network_endpoint_group"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1652,22 +2942,21 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "networkEndpointGroup" in jsonified_request - assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1678,7 +2967,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1689,35 +2978,36 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "networkEndpointGroup", + "networkEndpointGroupResource", "project", ) ) @@ -1725,7 +3015,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.GlobalNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1738,9 +3028,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalNetworkEndpointGroupsRestInterceptor, "post_get" + transports.GlobalNetworkEndpointGroupsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.GlobalNetworkEndpointGroupsRestInterceptor, "pre_get" + transports.GlobalNetworkEndpointGroupsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1755,19 +3045,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NetworkEndpointGroup.to_json( - compute.NetworkEndpointGroup() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetGlobalNetworkEndpointGroupRequest() + request = compute.InsertGlobalNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroup + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1779,8 +3067,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetGlobalNetworkEndpointGroupRequest +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertGlobalNetworkEndpointGroupRequest, ): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1788,7 +3077,35 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "network_endpoint_group": "sample2"} + request_init = {"project": "sample1"} + request_init["network_endpoint_group_resource"] = { + "annotations": {}, + "app_engine": { + "service": "service_value", + "url_mask": "url_mask_value", + "version": "version_value", + }, + "cloud_function": {"function": "function_value", "url_mask": "url_mask_value"}, + "cloud_run": { + "service": "service_value", + "tag": "tag_value", + "url_mask": "url_mask_value", + }, + "creation_timestamp": "creation_timestamp_value", + "default_port": 1289, + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_endpoint_type": "network_endpoint_type_value", + "psc_target_service": "psc_target_service_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1800,10 +3117,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1812,40 +3129,42 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "network_endpoint_group": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - network_endpoint_group="network_endpoint_group_value", + network_endpoint_group_resource=compute.NetworkEndpointGroup( + annotations={"key_value": "value_value"} + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networkEndpointGroups/{network_endpoint_group}" + "%s/compute/v1/projects/{project}/global/networkEndpointGroups" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1854,14 +3173,16 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetGlobalNetworkEndpointGroupRequest(), + client.insert( + compute.InsertGlobalNetworkEndpointGroupRequest(), project="project_value", - network_endpoint_group="network_endpoint_group_value", + network_endpoint_group_resource=compute.NetworkEndpointGroup( + annotations={"key_value": "value_value"} + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = GlobalNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1950,28 +3271,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -3016,6 +4315,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = GlobalNetworkEndpointGroupsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_global_network_endpoint_groups_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3053,6 +4365,14 @@ def test_global_network_endpoint_groups_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_global_network_endpoint_groups_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_global_operations.py b/tests/unit/gapic/compute_v1/test_global_operations.py index b37135b31..9ea6c1c83 100644 --- a/tests/unit/gapic/compute_v1/test_global_operations.py +++ b/tests/unit/gapic/compute_v1/test_global_operations.py @@ -2188,6 +2188,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = GlobalOperationsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_global_operations_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2223,6 +2236,14 @@ def test_global_operations_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_global_operations_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_global_organization_operations.py b/tests/unit/gapic/compute_v1/test_global_organization_operations.py index ac02a0e57..1f6f1e3fb 100644 --- a/tests/unit/gapic/compute_v1/test_global_organization_operations.py +++ b/tests/unit/gapic/compute_v1/test_global_organization_operations.py @@ -1379,6 +1379,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = GlobalOrganizationOperationsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_global_organization_operations_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1412,6 +1425,14 @@ def test_global_organization_operations_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_global_organization_operations_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_global_public_delegated_prefixes.py b/tests/unit/gapic/compute_v1/test_global_public_delegated_prefixes.py index 0aae3cd08..62ea3ffaf 100644 --- a/tests/unit/gapic/compute_v1/test_global_public_delegated_prefixes.py +++ b/tests/unit/gapic/compute_v1/test_global_public_delegated_prefixes.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -565,7 +567,7 @@ def test_global_public_delegated_prefixes_client_client_options_credentials_file dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -609,10 +611,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -637,7 +639,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteGlobalPublicDelegatedPrefixeRequest, ): transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport @@ -706,14 +708,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -731,7 +733,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -771,7 +773,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -783,7 +785,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteGlobalPublicDelegatedPrefixeRequest, ): @@ -805,10 +807,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -837,7 +839,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -850,7 +852,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -859,14 +861,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteGlobalPublicDelegatedPrefixeRequest(), project="project_value", public_delegated_prefix="public_delegated_prefix_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -875,11 +877,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetGlobalPublicDelegatedPrefixeRequest, + compute.DeleteGlobalPublicDelegatedPrefixeRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -892,47 +894,45 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefix( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_cidr_range="ip_cidr_range_value", - is_live_migration=True, + insert_time="insert_time_value", kind="kind_value", name="name_value", - parent_prefix="parent_prefix_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.PublicDelegatedPrefix) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.ip_cidr_range == "ip_cidr_range_value" - assert response.is_live_migration is True - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.parent_prefix == "parent_prefix_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.status == "status_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetGlobalPublicDelegatedPrefixeRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteGlobalPublicDelegatedPrefixeRequest, ): transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport @@ -950,7 +950,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -960,7 +960,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -976,7 +978,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefix() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -987,32 +989,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1023,7 +1025,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1036,9 +1038,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_get" + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_get" + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1053,19 +1055,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PublicDelegatedPrefix.to_json( - compute.PublicDelegatedPrefix() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetGlobalPublicDelegatedPrefixeRequest() + request = compute.DeleteGlobalPublicDelegatedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefix + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1077,8 +1077,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetGlobalPublicDelegatedPrefixeRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteGlobalPublicDelegatedPrefixeRequest, ): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1098,10 +1099,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1110,7 +1111,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefix() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "public_delegated_prefix": "sample2"} @@ -1125,12 +1126,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1143,7 +1144,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1152,14 +1153,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetGlobalPublicDelegatedPrefixeRequest(), + client.delete_unary( + compute.DeleteGlobalPublicDelegatedPrefixeRequest(), project="project_value", public_delegated_prefix="public_delegated_prefix_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1168,114 +1169,70 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertGlobalPublicDelegatedPrefixeRequest, + compute.GetGlobalPublicDelegatedPrefixeRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["public_delegated_prefix_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_cidr_range": "ip_cidr_range_value", - "is_live_migration": True, - "kind": "kind_value", - "name": "name_value", - "parent_prefix": "parent_prefix_value", - "public_delegated_sub_prefixs": [ - { - "delegatee_project": "delegatee_project_value", - "description": "description_value", - "ip_cidr_range": "ip_cidr_range_value", - "is_address": True, - "name": "name_value", - "region": "region_value", - "status": "status_value", - } - ], - "region": "region_value", - "self_link": "self_link_value", - "status": "status_value", - } + request_init = {"project": "sample1", "public_delegated_prefix": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.PublicDelegatedPrefix( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + ip_cidr_range="ip_cidr_range_value", + is_live_migration=True, kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + parent_prefix="parent_prefix_value", region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + status="status_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.PublicDelegatedPrefix) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.ip_cidr_range == "ip_cidr_range_value" + assert response.is_live_migration is True assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.parent_prefix == "parent_prefix_value" assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.status == "status_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertGlobalPublicDelegatedPrefixeRequest, +def test_get_rest_required_fields( + request_type=compute.GetGlobalPublicDelegatedPrefixeRequest, ): transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport request_init = {} request_init["project"] = "" + request_init["public_delegated_prefix"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1287,23 +1244,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["publicDelegatedPrefix"] = "public_delegated_prefix_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "publicDelegatedPrefix" in jsonified_request + assert jsonified_request["publicDelegatedPrefix"] == "public_delegated_prefix_value" client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1312,7 +1270,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PublicDelegatedPrefix() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1323,44 +1281,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "publicDelegatedPrefixResource", + "publicDelegatedPrefix", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1373,9 +1330,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_insert" + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_insert" + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1390,17 +1347,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.PublicDelegatedPrefix.to_json( + compute.PublicDelegatedPrefix() + ) - request = compute.InsertGlobalPublicDelegatedPrefixeRequest() + request = compute.GetGlobalPublicDelegatedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.PublicDelegatedPrefix - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1412,9 +1371,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.InsertGlobalPublicDelegatedPrefixeRequest, +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetGlobalPublicDelegatedPrefixeRequest ): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1422,9 +1380,688 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["public_delegated_prefix_resource"] = { - "creation_timestamp": "creation_timestamp_value", + request_init = {"project": "sample1", "public_delegated_prefix": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PublicDelegatedPrefix() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "public_delegated_prefix": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + public_delegated_prefix="public_delegated_prefix_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/publicDelegatedPrefixes/{public_delegated_prefix}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetGlobalPublicDelegatedPrefixeRequest(), + project="project_value", + public_delegated_prefix="public_delegated_prefix_value", + ) + + +def test_get_rest_error(): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertGlobalPublicDelegatedPrefixeRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertGlobalPublicDelegatedPrefixeRequest, +): + transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.GlobalPublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "publicDelegatedPrefixResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.GlobalPublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalPublicDelegatedPrefixesRestInterceptor(), + ) + client = GlobalPublicDelegatedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertGlobalPublicDelegatedPrefixeRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertGlobalPublicDelegatedPrefixeRequest, +): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/publicDelegatedPrefixes" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertGlobalPublicDelegatedPrefixeRequest(), + project="project_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertGlobalPublicDelegatedPrefixeRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertGlobalPublicDelegatedPrefixeRequest, +): + transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.GlobalPublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "publicDelegatedPrefixResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.GlobalPublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalPublicDelegatedPrefixesRestInterceptor(), + ) + client = GlobalPublicDelegatedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertGlobalPublicDelegatedPrefixeRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertGlobalPublicDelegatedPrefixeRequest, +): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", "description": "description_value", "fingerprint": "fingerprint_value", "id": 205, @@ -1443,11 +2080,302 @@ def test_insert_unary_rest_bad_request( "region": "region_value", "status": "status_value", } - ], - "region": "region_value", - "self_link": "self_link_value", - "status": "status_value", - } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/publicDelegatedPrefixes" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertGlobalPublicDelegatedPrefixeRequest(), + project="project_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListGlobalPublicDelegatedPrefixesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PublicDelegatedPrefixList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListGlobalPublicDelegatedPrefixesRequest, +): + transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.PublicDelegatedPrefixList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.GlobalPublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.GlobalPublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.GlobalPublicDelegatedPrefixesRestInterceptor(), + ) + client = GlobalPublicDelegatedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.PublicDelegatedPrefixList.to_json( + compute.PublicDelegatedPrefixList() + ) + + request = compute.ListGlobalPublicDelegatedPrefixesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.PublicDelegatedPrefixList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", + request_type=compute.ListGlobalPublicDelegatedPrefixesRequest, +): + client = GlobalPublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1459,10 +2387,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.list(request) -def test_insert_unary_rest_flattened(): +def test_list_rest_flattened(): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1471,7 +2399,7 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PublicDelegatedPrefixList() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1479,21 +2407,18 @@ def test_insert_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - public_delegated_prefix_resource=compute.PublicDelegatedPrefix( - creation_timestamp="creation_timestamp_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1506,7 +2431,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1515,71 +2440,185 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertGlobalPublicDelegatedPrefixeRequest(), + client.list( + compute.ListGlobalPublicDelegatedPrefixesRequest(), project="project_value", - public_delegated_prefix_resource=compute.PublicDelegatedPrefix( - creation_timestamp="creation_timestamp_value" - ), ) -def test_insert_unary_rest_error(): +def test_list_rest_pager(transport: str = "rest"): client = GlobalPublicDelegatedPrefixesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.PublicDelegatedPrefixList( + items=[ + compute.PublicDelegatedPrefix(), + compute.PublicDelegatedPrefix(), + compute.PublicDelegatedPrefix(), + ], + next_page_token="abc", + ), + compute.PublicDelegatedPrefixList( + items=[], + next_page_token="def", + ), + compute.PublicDelegatedPrefixList( + items=[ + compute.PublicDelegatedPrefix(), + ], + next_page_token="ghi", + ), + compute.PublicDelegatedPrefixList( + items=[ + compute.PublicDelegatedPrefix(), + compute.PublicDelegatedPrefix(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.PublicDelegatedPrefixList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.PublicDelegatedPrefix) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.ListGlobalPublicDelegatedPrefixesRequest, + compute.PatchGlobalPublicDelegatedPrefixeRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_rest(request_type): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "public_delegated_prefix": "sample2"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefixList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListGlobalPublicDelegatedPrefixesRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchGlobalPublicDelegatedPrefixeRequest, ): transport_class = transports.GlobalPublicDelegatedPrefixesRestTransport request_init = {} request_init["project"] = "" + request_init["public_delegated_prefix"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1591,31 +2630,26 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["publicDelegatedPrefix"] = "public_delegated_prefix_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "publicDelegatedPrefix" in jsonified_request + assert jsonified_request["publicDelegatedPrefix"] == "public_delegated_prefix_value" client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1624,7 +2658,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefixList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1635,46 +2669,45 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "publicDelegatedPrefix", + "publicDelegatedPrefixResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.GlobalPublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1687,9 +2720,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_list" + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_list" + transports.GlobalPublicDelegatedPrefixesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1704,19 +2737,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PublicDelegatedPrefixList.to_json( - compute.PublicDelegatedPrefixList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListGlobalPublicDelegatedPrefixesRequest() + request = compute.PatchGlobalPublicDelegatedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefixList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -1728,9 +2759,9 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( +def test_patch_rest_bad_request( transport: str = "rest", - request_type=compute.ListGlobalPublicDelegatedPrefixesRequest, + request_type=compute.PatchGlobalPublicDelegatedPrefixeRequest, ): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1738,7 +2769,32 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "public_delegated_prefix": "sample2"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1750,10 +2806,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1762,39 +2818,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefixList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "public_delegated_prefix": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + public_delegated_prefix="public_delegated_prefix_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/publicDelegatedPrefixes" + "%s/compute/v1/projects/{project}/global/publicDelegatedPrefixes/{public_delegated_prefix}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = GlobalPublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1803,72 +2863,21 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListGlobalPublicDelegatedPrefixesRequest(), + client.patch( + compute.PatchGlobalPublicDelegatedPrefixeRequest(), project="project_value", + public_delegated_prefix="public_delegated_prefix_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = GlobalPublicDelegatedPrefixesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.PublicDelegatedPrefixList( - items=[ - compute.PublicDelegatedPrefix(), - compute.PublicDelegatedPrefix(), - compute.PublicDelegatedPrefix(), - ], - next_page_token="abc", - ), - compute.PublicDelegatedPrefixList( - items=[], - next_page_token="def", - ), - compute.PublicDelegatedPrefixList( - items=[ - compute.PublicDelegatedPrefix(), - ], - next_page_token="ghi", - ), - compute.PublicDelegatedPrefixList( - items=[ - compute.PublicDelegatedPrefix(), - compute.PublicDelegatedPrefix(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.PublicDelegatedPrefixList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.PublicDelegatedPrefix) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -1950,28 +2959,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2317,6 +3304,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = GlobalPublicDelegatedPrefixesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_global_public_delegated_prefixes_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2352,6 +3352,14 @@ def test_global_public_delegated_prefixes_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_global_public_delegated_prefixes_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_health_checks.py b/tests/unit/gapic/compute_v1/test_health_checks.py index cc255411c..36872af97 100644 --- a/tests/unit/gapic/compute_v1/test_health_checks.py +++ b/tests/unit/gapic/compute_v1/test_health_checks.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -873,7 +875,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -917,10 +919,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -945,9 +947,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteHealthCheckRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteHealthCheckRequest): transport_class = transports.HealthChecksRestTransport request_init = {} @@ -1014,14 +1014,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1039,7 +1039,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1079,7 +1079,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1091,7 +1091,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteHealthCheckRequest ): client = HealthChecksClient( @@ -1112,10 +1112,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1144,7 +1144,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1157,7 +1157,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1166,14 +1166,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteHealthCheckRequest(), project="project_value", health_check="health_check_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1182,11 +1182,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetHealthCheckRequest, + compute.DeleteHealthCheckRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1199,46 +1199,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheck( - check_interval_sec=1884, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - healthy_threshold=1819, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - timeout_sec=1185, - type_="type__value", - unhealthy_threshold=2046, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheck.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.HealthCheck) - assert response.check_interval_sec == 1884 - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.healthy_threshold == 1819 - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.timeout_sec == 1185 - assert response.type_ == "type__value" - assert response.unhealthy_threshold == 2046 + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetHealthCheckRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteHealthCheckRequest, +): transport_class = transports.HealthChecksRestTransport request_init = {} @@ -1255,7 +1255,7 @@ def test_get_rest_required_fields(request_type=compute.GetHealthCheckRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1265,7 +1265,9 @@ def test_get_rest_required_fields(request_type=compute.GetHealthCheckRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1281,7 +1283,7 @@ def test_get_rest_required_fields(request_type=compute.GetHealthCheckRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.HealthCheck() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1292,32 +1294,32 @@ def test_get_rest_required_fields(request_type=compute.GetHealthCheckRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheck.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "healthCheck", @@ -1328,7 +1330,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1341,9 +1343,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.HealthChecksRestInterceptor, "post_get" + transports.HealthChecksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.HealthChecksRestInterceptor, "pre_get" + transports.HealthChecksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1358,17 +1360,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.HealthCheck.to_json(compute.HealthCheck()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetHealthCheckRequest() + request = compute.DeleteHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheck + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1380,8 +1382,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetHealthCheckRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteHealthCheckRequest ): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1401,10 +1403,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1413,7 +1415,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheck() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "health_check": "sample2"} @@ -1428,12 +1430,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheck.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1446,7 +1448,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1455,14 +1457,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetHealthCheckRequest(), + client.delete_unary( + compute.DeleteHealthCheckRequest(), project="project_value", health_check="health_check_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1471,152 +1473,67 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertHealthCheckRequest, + compute.GetHealthCheckRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["health_check_resource"] = { - "check_interval_sec": 1884, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "grpc_health_check": { - "grpc_service_name": "grpc_service_name_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - }, - "healthy_threshold": 1819, - "http2_health_check": { - "host": "host_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request_path": "request_path_value", - "response": "response_value", - }, - "http_health_check": { - "host": "host_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request_path": "request_path_value", - "response": "response_value", - }, - "https_health_check": { - "host": "host_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request_path": "request_path_value", - "response": "response_value", - }, - "id": 205, - "kind": "kind_value", - "log_config": {"enable": True}, - "name": "name_value", - "region": "region_value", - "self_link": "self_link_value", - "ssl_health_check": { - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request": "request_value", - "response": "response_value", - }, - "tcp_health_check": { - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request": "request_value", - "response": "response_value", - }, - "timeout_sec": 1185, - "type_": "type__value", - "unhealthy_threshold": 2046, - } + request_init = {"project": "sample1", "health_check": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.HealthCheck( + check_interval_sec=1884, creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + healthy_threshold=1819, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + timeout_sec=1185, + type_="type__value", + unhealthy_threshold=2046, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.HealthCheck.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.HealthCheck) + assert response.check_interval_sec == 1884 assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.healthy_threshold == 1819 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.timeout_sec == 1185 + assert response.type_ == "type__value" + assert response.unhealthy_threshold == 2046 -def test_insert_unary_rest_required_fields( - request_type=compute.InsertHealthCheckRequest, -): +def test_get_rest_required_fields(request_type=compute.GetHealthCheckRequest): transport_class = transports.HealthChecksRestTransport request_init = {} + request_init["health_check"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1629,21 +1546,22 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["healthCheck"] = "health_check_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "healthCheck" in jsonified_request + assert jsonified_request["healthCheck"] == "health_check_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1654,7 +1572,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.HealthCheck() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1665,7 +1583,1571 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheck.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "healthCheck", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.HealthChecksRestInterceptor(), + ) + client = HealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.HealthChecksRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.HealthChecksRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.HealthCheck.to_json(compute.HealthCheck()) + + request = compute.GetHealthCheckRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.HealthCheck + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetHealthCheckRequest +): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "health_check": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheck() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "health_check": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + health_check="health_check_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheck.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/healthChecks/{health_check}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetHealthCheckRequest(), + project="project_value", + health_check="health_check_value", + ) + + +def test_get_rest_error(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertHealthCheckRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertHealthCheckRequest): + transport_class = transports.HealthChecksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "healthCheckResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.HealthChecksRestInterceptor(), + ) + client = HealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.HealthChecksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.HealthChecksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertHealthCheckRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertHealthCheckRequest +): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/healthChecks" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertHealthCheckRequest(), + project="project_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + + +def test_insert_rest_error(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertHealthCheckRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertHealthCheckRequest, +): + transport_class = transports.HealthChecksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "healthCheckResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.HealthChecksRestInterceptor(), + ) + client = HealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.HealthChecksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.HealthChecksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertHealthCheckRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertHealthCheckRequest +): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/healthChecks" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertHealthCheckRequest(), + project="project_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + + +def test_insert_unary_rest_error(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListHealthChecksRequest, + dict, + ], +) +def test_list_rest(request_type): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListHealthChecksRequest): + transport_class = transports.HealthChecksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.HealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.HealthChecksRestInterceptor(), + ) + client = HealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.HealthChecksRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.HealthChecksRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.HealthCheckList.to_json( + compute.HealthCheckList() + ) + + request = compute.ListHealthChecksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.HealthCheckList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListHealthChecksRequest +): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/healthChecks" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListHealthChecksRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.HealthCheckList( + items=[ + compute.HealthCheck(), + compute.HealthCheck(), + compute.HealthCheck(), + ], + next_page_token="abc", + ), + compute.HealthCheckList( + items=[], + next_page_token="def", + ), + compute.HealthCheckList( + items=[ + compute.HealthCheck(), + ], + next_page_token="ghi", + ), + compute.HealthCheckList( + items=[ + compute.HealthCheck(), + compute.HealthCheck(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.HealthCheckList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.HealthCheck) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchHealthCheckRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "health_check": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchHealthCheckRequest): + transport_class = transports.HealthChecksRestTransport + + request_init = {} + request_init["health_check"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["healthCheck"] = "health_check_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "healthCheck" in jsonified_request + assert jsonified_request["healthCheck"] == "health_check_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = HealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -1677,23 +3159,24 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( + "healthCheck", "healthCheckResource", "project", ) @@ -1702,7 +3185,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1715,9 +3198,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.HealthChecksRestInterceptor, "post_insert" + transports.HealthChecksRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.HealthChecksRestInterceptor, "pre_insert" + transports.HealthChecksRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1734,7 +3217,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertHealthCheckRequest() + request = compute.PatchHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1742,7 +3225,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.patch( request, metadata=[ ("key", "val"), @@ -1754,8 +3237,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertHealthCheckRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchHealthCheckRequest ): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1763,7 +3246,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "health_check": "sample2"} request_init["health_check_resource"] = { "check_interval_sec": 1884, "creation_timestamp": "creation_timestamp_value", @@ -1839,10 +3322,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1854,11 +3337,12 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "health_check": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + health_check="health_check_value", health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) mock_args.update(sample_request) @@ -1871,20 +3355,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/healthChecks" + "%s/compute/v1/projects/{project}/global/healthChecks/{health_check}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1893,14 +3377,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertHealthCheckRequest(), + client.patch( + compute.PatchHealthCheckRequest(), project="project_value", + health_check="health_check_value", health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1909,50 +3394,129 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListHealthChecksRequest, + compute.PatchHealthCheckRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "health_check": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListHealthChecksRequest): +def test_patch_unary_rest_required_fields(request_type=compute.PatchHealthCheckRequest): transport_class = transports.HealthChecksRestTransport request_init = {} + request_init["health_check"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1965,29 +3529,24 @@ def test_list_rest_required_fields(request_type=compute.ListHealthChecksRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["healthCheck"] = "health_check_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "healthCheck" in jsonified_request + assert jsonified_request["healthCheck"] == "health_check_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1998,7 +3557,7 @@ def test_list_rest_required_fields(request_type=compute.ListHealthChecksRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2009,46 +3568,45 @@ def test_list_rest_required_fields(request_type=compute.ListHealthChecksRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "healthCheck", + "healthCheckResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2061,9 +3619,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.HealthChecksRestInterceptor, "post_list" + transports.HealthChecksRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.HealthChecksRestInterceptor, "pre_list" + transports.HealthChecksRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2078,19 +3636,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.HealthCheckList.to_json( - compute.HealthCheckList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListHealthChecksRequest() + request = compute.PatchHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -2102,8 +3658,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListHealthChecksRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchHealthCheckRequest ): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2111,7 +3667,71 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "health_check": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2123,10 +3743,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2135,39 +3755,41 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "health_check": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + health_check="health_check_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/healthChecks" + "%s/compute/v1/projects/{project}/global/healthChecks/{health_check}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2176,81 +3798,28 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListHealthChecksRequest(), + client.patch_unary( + compute.PatchHealthCheckRequest(), project="project_value", + health_check="health_check_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = HealthChecksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.HealthCheckList( - items=[ - compute.HealthCheck(), - compute.HealthCheck(), - compute.HealthCheck(), - ], - next_page_token="abc", - ), - compute.HealthCheckList( - items=[], - next_page_token="def", - ), - compute.HealthCheckList( - items=[ - compute.HealthCheck(), - ], - next_page_token="ghi", - ), - compute.HealthCheckList( - items=[ - compute.HealthCheck(), - compute.HealthCheck(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.HealthCheckList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.HealthCheck) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchHealthCheckRequest, + compute.UpdateHealthCheckRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2358,10 +3927,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2386,7 +3955,7 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchHealthCheckRequest): +def test_update_rest_required_fields(request_type=compute.UpdateHealthCheckRequest): transport_class = transports.HealthChecksRestTransport request_init = {} @@ -2403,7 +3972,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchHealthCheckR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2413,7 +3982,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchHealthCheckR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2442,7 +4011,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchHealthCheckR # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2454,19 +4023,19 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchHealthCheckR response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -2480,7 +4049,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.HealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2493,9 +4062,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.HealthChecksRestInterceptor, "post_patch" + transports.HealthChecksRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.HealthChecksRestInterceptor, "pre_patch" + transports.HealthChecksRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2512,7 +4081,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchHealthCheckRequest() + request = compute.UpdateHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2520,7 +4089,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2532,8 +4101,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchHealthCheckRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateHealthCheckRequest ): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2617,10 +4186,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2650,7 +4219,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2663,7 +4232,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2672,15 +4241,15 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchHealthCheckRequest(), + client.update( + compute.UpdateHealthCheckRequest(), project="project_value", health_check="health_check_value", health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = HealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2805,28 +4374,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -3206,6 +4753,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = HealthChecksClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_health_checks_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3243,6 +4803,14 @@ def test_health_checks_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_health_checks_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_image_family_views.py b/tests/unit/gapic/compute_v1/test_image_family_views.py index ca6cef236..55966dc1f 100644 --- a/tests/unit/gapic/compute_v1/test_image_family_views.py +++ b/tests/unit/gapic/compute_v1/test_image_family_views.py @@ -885,6 +885,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ImageFamilyViewsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_image_family_views_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -914,6 +927,14 @@ def test_image_family_views_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_image_family_views_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_images.py b/tests/unit/gapic/compute_v1/test_images.py index 0dc939f97..28743c5c0 100644 --- a/tests/unit/gapic/compute_v1/test_images.py +++ b/tests/unit/gapic/compute_v1/test_images.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -509,7 +511,7 @@ def test_images_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -553,10 +555,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -581,7 +583,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteImageRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteImageRequest): transport_class = transports.ImagesRestTransport request_init = {} @@ -648,14 +650,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteImageReque response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -673,7 +675,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -711,7 +713,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -723,7 +725,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteImageRequest ): client = ImagesClient( @@ -744,10 +746,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -776,7 +778,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -789,7 +791,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -798,14 +800,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteImageRequest(), project="project_value", image="image_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -814,11 +816,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeprecateImageRequest, + compute.DeleteImageRequest, dict, ], ) -def test_deprecate_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -826,13 +828,6 @@ def test_deprecate_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "image": "sample2"} - request_init["deprecation_status_resource"] = { - "deleted": "deleted_value", - "deprecated": "deprecated_value", - "obsolete": "obsolete_value", - "replacement": "replacement_value", - "state": "state_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -869,37 +864,13 @@ def test_deprecate_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.deprecate_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_deprecate_unary_rest_required_fields( - request_type=compute.DeprecateImageRequest, -): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteImageRequest): transport_class = transports.ImagesRestTransport request_init = {} @@ -916,7 +887,7 @@ def test_deprecate_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).deprecate._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -926,7 +897,7 @@ def test_deprecate_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).deprecate._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -955,10 +926,9 @@ def test_deprecate_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -967,24 +937,23 @@ def test_deprecate_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.deprecate_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_deprecate_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.deprecate._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "deprecationStatusResource", "image", "project", ) @@ -993,7 +962,7 @@ def test_deprecate_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_deprecate_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -1004,9 +973,9 @@ def test_deprecate_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_deprecate" + transports.ImagesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_deprecate" + transports.ImagesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1023,7 +992,7 @@ def test_deprecate_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeprecateImageRequest() + request = compute.DeleteImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1031,7 +1000,7 @@ def test_deprecate_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.deprecate_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1043,8 +1012,8 @@ def test_deprecate_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_deprecate_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeprecateImageRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1053,13 +1022,6 @@ def test_deprecate_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "image": "sample2"} - request_init["deprecation_status_resource"] = { - "deleted": "deleted_value", - "deprecated": "deprecated_value", - "obsolete": "obsolete_value", - "replacement": "replacement_value", - "state": "state_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1071,10 +1033,10 @@ def test_deprecate_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.deprecate_unary(request) + client.delete_unary(request) -def test_deprecate_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1092,9 +1054,6 @@ def test_deprecate_unary_rest_flattened(): mock_args = dict( project="project_value", image="image_value", - deprecation_status_resource=compute.DeprecationStatus( - deleted="deleted_value" - ), ) mock_args.update(sample_request) @@ -1106,20 +1065,20 @@ def test_deprecate_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.deprecate_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images/{image}/deprecate" + "%s/compute/v1/projects/{project}/global/images/{image}" % client.transport._host, args[1], ) -def test_deprecate_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1128,17 +1087,14 @@ def test_deprecate_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.deprecate_unary( - compute.DeprecateImageRequest(), + client.delete_unary( + compute.DeleteImageRequest(), project="project_value", image="image_value", - deprecation_status_resource=compute.DeprecationStatus( - deleted="deleted_value" - ), ) -def test_deprecate_unary_rest_error(): +def test_delete_unary_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1147,11 +1103,11 @@ def test_deprecate_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetImageRequest, + compute.DeprecateImageRequest, dict, ], ) -def test_get_rest(request_type): +def test_deprecate_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1159,71 +1115,78 @@ def test_get_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "image": "sample2"} + request_init["deprecation_status_resource"] = { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Image( - archive_size_bytes=1922, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - disk_size_gb=1261, - family="family_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", - license_codes=[1360], - licenses=["licenses_value"], name="name_value", - satisfies_pzs=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - source_disk="source_disk_value", - source_disk_id="source_disk_id_value", - source_image="source_image_value", - source_image_id="source_image_id_value", - source_snapshot="source_snapshot_value", - source_snapshot_id="source_snapshot_id_value", - source_type="source_type_value", - status="status_value", - storage_locations=["storage_locations_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Image.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.deprecate(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Image) - assert response.archive_size_bytes == 1922 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.disk_size_gb == 1261 - assert response.family == "family_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.license_codes == [1360] - assert response.licenses == ["licenses_value"] assert response.name == "name_value" - assert response.satisfies_pzs is True + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.source_disk == "source_disk_value" - assert response.source_disk_id == "source_disk_id_value" - assert response.source_image == "source_image_value" - assert response.source_image_id == "source_image_id_value" - assert response.source_snapshot == "source_snapshot_value" - assert response.source_snapshot_id == "source_snapshot_id_value" - assert response.source_type == "source_type_value" - assert response.status == "status_value" - assert response.storage_locations == ["storage_locations_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetImageRequest): +def test_deprecate_rest_required_fields(request_type=compute.DeprecateImageRequest): transport_class = transports.ImagesRestTransport request_init = {} @@ -1240,7 +1203,7 @@ def test_get_rest_required_fields(request_type=compute.GetImageRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).deprecate._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1250,7 +1213,9 @@ def test_get_rest_required_fields(request_type=compute.GetImageRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).deprecate._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1266,7 +1231,7 @@ def test_get_rest_required_fields(request_type=compute.GetImageRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Image() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1277,34 +1242,36 @@ def test_get_rest_required_fields(request_type=compute.GetImageRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Image.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.deprecate(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_deprecate_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.deprecate._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( + "deprecationStatusResource", "image", "project", ) @@ -1313,7 +1280,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_deprecate_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -1324,9 +1291,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_get" + transports.ImagesRestInterceptor, "post_deprecate" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_get" + transports.ImagesRestInterceptor, "pre_deprecate" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1341,17 +1308,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Image.to_json(compute.Image()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetImageRequest() + request = compute.DeprecateImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Image + post.return_value = compute.Operation - client.get( + client.deprecate( request, metadata=[ ("key", "val"), @@ -1363,8 +1330,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetImageRequest +def test_deprecate_rest_bad_request( + transport: str = "rest", request_type=compute.DeprecateImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1373,6 +1340,13 @@ def test_get_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "image": "sample2"} + request_init["deprecation_status_resource"] = { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1384,10 +1358,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.deprecate(request) -def test_get_rest_flattened(): +def test_deprecate_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1396,7 +1370,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Image() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "image": "sample2"} @@ -1405,31 +1379,34 @@ def test_get_rest_flattened(): mock_args = dict( project="project_value", image="image_value", + deprecation_status_resource=compute.DeprecationStatus( + deleted="deleted_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Image.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.deprecate(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images/{image}" + "%s/compute/v1/projects/{project}/global/images/{image}/deprecate" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_deprecate_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1438,14 +1415,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetImageRequest(), + client.deprecate( + compute.DeprecateImageRequest(), project="project_value", image="image_value", + deprecation_status_resource=compute.DeprecationStatus( + deleted="deleted_value" + ), ) -def test_get_rest_error(): +def test_deprecate_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1454,89 +1434,74 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetFromFamilyImageRequest, + compute.DeprecateImageRequest, dict, ], ) -def test_get_from_family_rest(request_type): +def test_deprecate_unary_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "family": "sample2"} + request_init = {"project": "sample1", "image": "sample2"} + request_init["deprecation_status_resource"] = { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Image( - archive_size_bytes=1922, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - disk_size_gb=1261, - family="family_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", - license_codes=[1360], - licenses=["licenses_value"], name="name_value", - satisfies_pzs=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - source_disk="source_disk_value", - source_disk_id="source_disk_id_value", - source_image="source_image_value", - source_image_id="source_image_id_value", - source_snapshot="source_snapshot_value", - source_snapshot_id="source_snapshot_id_value", - source_type="source_type_value", - status="status_value", - storage_locations=["storage_locations_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Image.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_from_family(request) + response = client.deprecate_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Image) - assert response.archive_size_bytes == 1922 - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.disk_size_gb == 1261 - assert response.family == "family_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.license_codes == [1360] - assert response.licenses == ["licenses_value"] - assert response.name == "name_value" - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.source_disk == "source_disk_value" - assert response.source_disk_id == "source_disk_id_value" - assert response.source_image == "source_image_value" - assert response.source_image_id == "source_image_id_value" - assert response.source_snapshot == "source_snapshot_value" - assert response.source_snapshot_id == "source_snapshot_id_value" - assert response.source_type == "source_type_value" - assert response.status == "status_value" - assert response.storage_locations == ["storage_locations_value"] + assert isinstance(response, compute.Operation) -def test_get_from_family_rest_required_fields( - request_type=compute.GetFromFamilyImageRequest, +def test_deprecate_unary_rest_required_fields( + request_type=compute.DeprecateImageRequest, ): transport_class = transports.ImagesRestTransport request_init = {} - request_init["family"] = "" + request_init["image"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1549,22 +1514,24 @@ def test_get_from_family_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_from_family._get_unset_required_fields(jsonified_request) + ).deprecate._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["family"] = "family_value" + jsonified_request["image"] = "image_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_from_family._get_unset_required_fields(jsonified_request) + ).deprecate._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "family" in jsonified_request - assert jsonified_request["family"] == "family_value" + assert "image" in jsonified_request + assert jsonified_request["image"] == "image_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1575,7 +1542,7 @@ def test_get_from_family_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Image() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1586,35 +1553,37 @@ def test_get_from_family_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Image.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_from_family(request) + response = client.deprecate_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_from_family_rest_unset_required_fields(): +def test_deprecate_unary_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_from_family._get_unset_required_fields({}) + unset_fields = transport.deprecate._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "family", + "deprecationStatusResource", + "image", "project", ) ) @@ -1622,7 +1591,7 @@ def test_get_from_family_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_from_family_rest_interceptors(null_interceptor): +def test_deprecate_unary_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -1633,9 +1602,9 @@ def test_get_from_family_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_get_from_family" + transports.ImagesRestInterceptor, "post_deprecate" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_get_from_family" + transports.ImagesRestInterceptor, "pre_deprecate" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1650,17 +1619,17 @@ def test_get_from_family_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Image.to_json(compute.Image()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetFromFamilyImageRequest() + request = compute.DeprecateImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Image + post.return_value = compute.Operation - client.get_from_family( + client.deprecate_unary( request, metadata=[ ("key", "val"), @@ -1672,8 +1641,8 @@ def test_get_from_family_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_from_family_rest_bad_request( - transport: str = "rest", request_type=compute.GetFromFamilyImageRequest +def test_deprecate_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeprecateImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1681,7 +1650,14 @@ def test_get_from_family_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "family": "sample2"} + request_init = {"project": "sample1", "image": "sample2"} + request_init["deprecation_status_resource"] = { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1693,10 +1669,10 @@ def test_get_from_family_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_from_family(request) + client.deprecate_unary(request) -def test_get_from_family_rest_flattened(): +def test_deprecate_unary_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1705,40 +1681,43 @@ def test_get_from_family_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Image() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "family": "sample2"} + sample_request = {"project": "sample1", "image": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - family="family_value", + image="image_value", + deprecation_status_resource=compute.DeprecationStatus( + deleted="deleted_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Image.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_from_family(**mock_args) + client.deprecate_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images/family/{family}" + "%s/compute/v1/projects/{project}/global/images/{image}/deprecate" % client.transport._host, args[1], ) -def test_get_from_family_rest_flattened_error(transport: str = "rest"): +def test_deprecate_unary_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1747,14 +1726,17 @@ def test_get_from_family_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_from_family( - compute.GetFromFamilyImageRequest(), + client.deprecate_unary( + compute.DeprecateImageRequest(), project="project_value", - family="family_value", + image="image_value", + deprecation_status_resource=compute.DeprecationStatus( + deleted="deleted_value" + ), ) -def test_get_from_family_rest_error(): +def test_deprecate_unary_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1763,52 +1745,88 @@ def test_get_from_family_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyImageRequest, + compute.GetImageRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "image": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Image( + archive_size_bytes=1922, + creation_timestamp="creation_timestamp_value", + description="description_value", + disk_size_gb=1261, + family="family_value", + id=205, + kind="kind_value", + label_fingerprint="label_fingerprint_value", + license_codes=[1360], + licenses=["licenses_value"], + name="name_value", + satisfies_pzs=True, + self_link="self_link_value", + source_disk="source_disk_value", + source_disk_id="source_disk_id_value", + source_image="source_image_value", + source_image_id="source_image_id_value", + source_snapshot="source_snapshot_value", + source_snapshot_id="source_snapshot_id_value", + source_type="source_type_value", + status="status_value", + storage_locations=["storage_locations_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Image.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.Image) + assert response.archive_size_bytes == 1922 + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.disk_size_gb == 1261 + assert response.family == "family_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.license_codes == [1360] + assert response.licenses == ["licenses_value"] + assert response.name == "name_value" + assert response.satisfies_pzs is True + assert response.self_link == "self_link_value" + assert response.source_disk == "source_disk_value" + assert response.source_disk_id == "source_disk_id_value" + assert response.source_image == "source_image_value" + assert response.source_image_id == "source_image_id_value" + assert response.source_snapshot == "source_snapshot_value" + assert response.source_snapshot_id == "source_snapshot_id_value" + assert response.source_type == "source_type_value" + assert response.status == "status_value" + assert response.storage_locations == ["storage_locations_value"] -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyImageRequest, -): +def test_get_rest_required_fields(request_type=compute.GetImageRequest): transport_class = transports.ImagesRestTransport request_init = {} + request_init["image"] = "" request_init["project"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1820,26 +1838,24 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["image"] = "image_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "image" in jsonified_request + assert jsonified_request["image"] == "image_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1848,7 +1864,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Image() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1866,36 +1882,36 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Image.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(()) & set( ( + "image", "project", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -1906,9 +1922,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_get_iam_policy" + transports.ImagesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_get_iam_policy" + transports.ImagesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1923,17 +1939,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Image.to_json(compute.Image()) - request = compute.GetIamPolicyImageRequest() + request = compute.GetImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Image - client.get_iam_policy( + client.get( request, metadata=[ ("key", "val"), @@ -1945,8 +1961,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyImageRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1954,7 +1970,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "image": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1966,10 +1982,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.get(request) -def test_get_iam_policy_rest_flattened(): +def test_get_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1978,40 +1994,40 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Image() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1", "image": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", + image="image_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Image.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/global/images/{image}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2020,14 +2036,14 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyImageRequest(), + client.get( + compute.GetImageRequest(), project="project_value", - resource="resource_value", + image="image_value", ) -def test_get_iam_policy_rest_error(): +def test_get_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2036,140 +2052,89 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertImageRequest, + compute.GetFromFamilyImageRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_from_family_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["image_resource"] = { - "archive_size_bytes": 1922, - "creation_timestamp": "creation_timestamp_value", - "deprecated": { - "deleted": "deleted_value", - "deprecated": "deprecated_value", - "obsolete": "obsolete_value", - "replacement": "replacement_value", - "state": "state_value", - }, - "description": "description_value", - "disk_size_gb": 1261, - "family": "family_value", - "guest_os_features": [{"type_": "type__value"}], - "id": 205, - "image_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "name": "name_value", - "raw_disk": { - "container_type": "container_type_value", - "sha1_checksum": "sha1_checksum_value", - "source": "source_value", - }, - "satisfies_pzs": True, - "self_link": "self_link_value", - "shielded_instance_initial_state": { - "dbs": [{"content": "content_value", "file_type": "file_type_value"}], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_image_id": "source_image_id_value", - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - "source_snapshot_id": "source_snapshot_id_value", - "source_type": "source_type_value", - "status": "status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], - } + request_init = {"project": "sample1", "family": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Image( + archive_size_bytes=1922, creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + disk_size_gb=1261, + family="family_value", id=205, - insert_time="insert_time_value", kind="kind_value", + label_fingerprint="label_fingerprint_value", + license_codes=[1360], + licenses=["licenses_value"], name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + satisfies_pzs=True, self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + source_disk="source_disk_value", + source_disk_id="source_disk_id_value", + source_image="source_image_value", + source_image_id="source_image_id_value", + source_snapshot="source_snapshot_value", + source_snapshot_id="source_snapshot_id_value", + source_type="source_type_value", + status="status_value", + storage_locations=["storage_locations_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Image.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_from_family(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Image) + assert response.archive_size_bytes == 1922 assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.disk_size_gb == 1261 + assert response.family == "family_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.license_codes == [1360] + assert response.licenses == ["licenses_value"] assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.satisfies_pzs is True assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.source_disk == "source_disk_value" + assert response.source_disk_id == "source_disk_id_value" + assert response.source_image == "source_image_value" + assert response.source_image_id == "source_image_id_value" + assert response.source_snapshot == "source_snapshot_value" + assert response.source_snapshot_id == "source_snapshot_id_value" + assert response.source_type == "source_type_value" + assert response.status == "status_value" + assert response.storage_locations == ["storage_locations_value"] -def test_insert_unary_rest_required_fields(request_type=compute.InsertImageRequest): +def test_get_from_family_rest_required_fields( + request_type=compute.GetFromFamilyImageRequest, +): transport_class = transports.ImagesRestTransport request_init = {} + request_init["family"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2182,26 +2147,22 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertImageReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_from_family._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["family"] = "family_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "force_create", - "request_id", - ) - ) + ).get_from_family._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "family" in jsonified_request + assert jsonified_request["family"] == "family_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -2212,7 +2173,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertImageReque request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Image() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2223,41 +2184,35 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertImageReque # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Image.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_from_family(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_from_family_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_from_family._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "forceCreate", - "requestId", - ) - ) + set(()) & set( ( - "imageResource", + "family", "project", ) ) @@ -2265,7 +2220,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_from_family_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -2276,9 +2231,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_insert" + transports.ImagesRestInterceptor, "post_get_from_family" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_insert" + transports.ImagesRestInterceptor, "pre_get_from_family" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2293,17 +2248,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Image.to_json(compute.Image()) - request = compute.InsertImageRequest() + request = compute.GetFromFamilyImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Image - client.insert_unary( + client.get_from_family( request, metadata=[ ("key", "val"), @@ -2315,8 +2270,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertImageRequest +def test_get_from_family_rest_bad_request( + transport: str = "rest", request_type=compute.GetFromFamilyImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2324,61 +2279,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["image_resource"] = { - "archive_size_bytes": 1922, - "creation_timestamp": "creation_timestamp_value", - "deprecated": { - "deleted": "deleted_value", - "deprecated": "deprecated_value", - "obsolete": "obsolete_value", - "replacement": "replacement_value", - "state": "state_value", - }, - "description": "description_value", - "disk_size_gb": 1261, - "family": "family_value", - "guest_os_features": [{"type_": "type__value"}], - "id": 205, - "image_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "name": "name_value", - "raw_disk": { - "container_type": "container_type_value", - "sha1_checksum": "sha1_checksum_value", - "source": "source_value", - }, - "satisfies_pzs": True, - "self_link": "self_link_value", - "shielded_instance_initial_state": { - "dbs": [{"content": "content_value", "file_type": "file_type_value"}], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_image_id": "source_image_id_value", - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - "source_snapshot_id": "source_snapshot_id_value", - "source_type": "source_type_value", - "status": "status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], - } + request_init = {"project": "sample1", "family": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2390,10 +2291,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get_from_family(request) -def test_insert_unary_rest_flattened(): +def test_get_from_family_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2402,39 +2303,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Image() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "family": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - image_resource=compute.Image(archive_size_bytes=1922), + family="family_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Image.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get_from_family(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images" % client.transport._host, + "%s/compute/v1/projects/{project}/global/images/family/{family}" + % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_from_family_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2443,14 +2345,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertImageRequest(), + client.get_from_family( + compute.GetFromFamilyImageRequest(), project="project_value", - image_resource=compute.Image(archive_size_bytes=1922), + family="family_value", ) -def test_insert_unary_rest_error(): +def test_get_from_family_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2459,51 +2361,52 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListImagesRequest, + compute.GetIamPolicyImageRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_iam_policy_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "resource": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ImageList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ImageList.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_list_rest_required_fields(request_type=compute.ListImagesRequest): +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyImageRequest, +): transport_class = transports.ImagesRestTransport request_init = {} request_init["project"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2515,31 +2418,26 @@ def test_list_rest_required_fields(request_type=compute.ListImagesRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2548,7 +2446,7 @@ def test_list_rest_required_fields(request_type=compute.ListImagesRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ImageList() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2566,39 +2464,36 @@ def test_list_rest_required_fields(request_type=compute.ListImagesRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.ImageList.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("optionsRequestedPolicyVersion",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "resource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -2609,9 +2504,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_list" + transports.ImagesRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_list" + transports.ImagesRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2626,17 +2521,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ImageList.to_json(compute.ImageList()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.ListImagesRequest() + request = compute.GetIamPolicyImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ImageList + post.return_value = compute.Policy - client.list( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -2648,8 +2543,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListImagesRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2657,7 +2552,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "resource": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2669,10 +2564,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get_iam_policy(request) -def test_list_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2681,38 +2576,40 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ImageList() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "resource": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ImageList.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images" % client.transport._host, + "%s/compute/v1/projects/{project}/global/images/{resource}/getIamPolicy" + % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2721,88 +2618,34 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListImagesRequest(), + client.get_iam_policy( + compute.GetIamPolicyImageRequest(), project="project_value", + resource="resource_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_iam_policy_rest_error(): client = ImagesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ImageList( - items=[ - compute.Image(), - compute.Image(), - compute.Image(), - ], - next_page_token="abc", - ), - compute.ImageList( - items=[], - next_page_token="def", - ), - compute.ImageList( - items=[ - compute.Image(), - ], - next_page_token="ghi", - ), - compute.ImageList( - items=[ - compute.Image(), - compute.Image(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ImageList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Image) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchImageRequest, + compute.InsertImageRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_insert_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "image": "sample2"} + request_init = {"project": "sample1"} request_init["image_resource"] = { "archive_size_bytes": 1922, "creation_timestamp": "creation_timestamp_value", @@ -2893,10 +2736,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2921,11 +2764,10 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchImageRequest): +def test_insert_rest_required_fields(request_type=compute.InsertImageRequest): transport_class = transports.ImagesRestTransport request_init = {} - request_init["image"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2938,24 +2780,26 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchImageRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["image"] = "image_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "force_create", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "image" in jsonified_request - assert jsonified_request["image"] == "image_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -2977,7 +2821,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchImageRequest # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2989,24 +2833,28 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchImageRequest response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "forceCreate", + "requestId", + ) + ) & set( ( - "image", "imageResource", "project", ) @@ -3015,7 +2863,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -3026,9 +2874,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_patch" + transports.ImagesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_patch" + transports.ImagesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3045,7 +2893,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchImageRequest() + request = compute.InsertImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3053,7 +2901,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.insert( request, metadata=[ ("key", "val"), @@ -3065,8 +2913,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchImageRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3074,7 +2922,7 @@ def test_patch_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "image": "sample2"} + request_init = {"project": "sample1"} request_init["image_resource"] = { "archive_size_bytes": 1922, "creation_timestamp": "creation_timestamp_value", @@ -3140,10 +2988,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.insert(request) -def test_patch_unary_rest_flattened(): +def test_insert_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3155,12 +3003,11 @@ def test_patch_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "image": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - image="image_value", image_resource=compute.Image(archive_size_bytes=1922), ) mock_args.update(sample_request) @@ -3173,20 +3020,19 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images/{image}" - % client.transport._host, + "%s/compute/v1/projects/{project}/global/images" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3195,15 +3041,14 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchImageRequest(), + client.insert( + compute.InsertImageRequest(), project="project_value", - image="image_value", image_resource=compute.Image(archive_size_bytes=1922), ) -def test_patch_unary_rest_error(): +def test_insert_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3212,124 +3057,2073 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicyImageRequest, + compute.InsertImageRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_insert_unary_rest(request_type): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} - request_init["global_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, + request_init = {"project": "sample1"} + request_init["image_resource"] = { + "archive_size_bytes": 1922, + "creation_timestamp": "creation_timestamp_value", + "deprecated": { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + }, + "description": "description_value", + "disk_size_gb": 1261, + "family": "family_value", + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "image_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "name": "name_value", + "raw_disk": { + "container_type": "container_type_value", + "sha1_checksum": "sha1_checksum_value", + "source": "source_value", + }, + "satisfies_pzs": True, + "self_link": "self_link_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_type": "source_type_value", + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertImageRequest): + transport_class = transports.ImagesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "force_create", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "forceCreate", + "requestId", + ) + ) + & set( + ( + "imageResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), + ) + client = ImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ImagesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ImagesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertImageRequest +): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["image_resource"] = { + "archive_size_bytes": 1922, + "creation_timestamp": "creation_timestamp_value", + "deprecated": { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + }, + "description": "description_value", + "disk_size_gb": 1261, + "family": "family_value", + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "image_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "name": "name_value", + "raw_disk": { + "container_type": "container_type_value", + "sha1_checksum": "sha1_checksum_value", + "source": "source_value", + }, + "satisfies_pzs": True, + "self_link": "self_link_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_type": "source_type_value", + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + image_resource=compute.Image(archive_size_bytes=1922), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/images" % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertImageRequest(), + project="project_value", + image_resource=compute.Image(archive_size_bytes=1922), + ) + + +def test_insert_unary_rest_error(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListImagesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ImageList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ImageList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListImagesRequest): + transport_class = transports.ImagesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ImageList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ImageList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), + ) + client = ImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ImagesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.ImagesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ImageList.to_json(compute.ImageList()) + + request = compute.ListImagesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ImageList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListImagesRequest +): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ImageList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ImageList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/images" % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListImagesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ImageList( + items=[ + compute.Image(), + compute.Image(), + compute.Image(), + ], + next_page_token="abc", + ), + compute.ImageList( + items=[], + next_page_token="def", + ), + compute.ImageList( + items=[ + compute.Image(), + ], + next_page_token="ghi", + ), + compute.ImageList( + items=[ + compute.Image(), + compute.Image(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ImageList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Image) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchImageRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "image": "sample2"} + request_init["image_resource"] = { + "archive_size_bytes": 1922, + "creation_timestamp": "creation_timestamp_value", + "deprecated": { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + }, + "description": "description_value", + "disk_size_gb": 1261, + "family": "family_value", + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "image_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "name": "name_value", + "raw_disk": { + "container_type": "container_type_value", + "sha1_checksum": "sha1_checksum_value", + "source": "source_value", + }, + "satisfies_pzs": True, + "self_link": "self_link_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_type": "source_type_value", + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchImageRequest): + transport_class = transports.ImagesRestTransport + + request_init = {} + request_init["image"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["image"] = "image_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "image" in jsonified_request + assert jsonified_request["image"] == "image_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "image", + "imageResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), + ) + client = ImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ImagesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.ImagesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchImageRequest +): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "image": "sample2"} + request_init["image_resource"] = { + "archive_size_bytes": 1922, + "creation_timestamp": "creation_timestamp_value", + "deprecated": { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + }, + "description": "description_value", + "disk_size_gb": 1261, + "family": "family_value", + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "image_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "name": "name_value", + "raw_disk": { + "container_type": "container_type_value", + "sha1_checksum": "sha1_checksum_value", + "source": "source_value", + }, + "satisfies_pzs": True, + "self_link": "self_link_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_type": "source_type_value", + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "image": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + image="image_value", + image_resource=compute.Image(archive_size_bytes=1922), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/images/{image}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchImageRequest(), + project="project_value", + image="image_value", + image_resource=compute.Image(archive_size_bytes=1922), + ) + + +def test_patch_rest_error(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchImageRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "image": "sample2"} + request_init["image_resource"] = { + "archive_size_bytes": 1922, + "creation_timestamp": "creation_timestamp_value", + "deprecated": { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + }, + "description": "description_value", + "disk_size_gb": 1261, + "family": "family_value", + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "image_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "name": "name_value", + "raw_disk": { + "container_type": "container_type_value", + "sha1_checksum": "sha1_checksum_value", + "source": "source_value", + }, + "satisfies_pzs": True, + "self_link": "self_link_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_type": "source_type_value", + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields(request_type=compute.PatchImageRequest): + transport_class = transports.ImagesRestTransport + + request_init = {} + request_init["image"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["image"] = "image_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "image" in jsonified_request + assert jsonified_request["image"] == "image_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "image", + "imageResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), + ) + client = ImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ImagesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.ImagesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchImageRequest +): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "image": "sample2"} + request_init["image_resource"] = { + "archive_size_bytes": 1922, + "creation_timestamp": "creation_timestamp_value", + "deprecated": { + "deleted": "deleted_value", + "deprecated": "deprecated_value", + "obsolete": "obsolete_value", + "replacement": "replacement_value", + "state": "state_value", + }, + "description": "description_value", + "disk_size_gb": 1261, + "family": "family_value", + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "image_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "name": "name_value", + "raw_disk": { + "container_type": "container_type_value", + "sha1_checksum": "sha1_checksum_value", + "source": "source_value", + }, + "satisfies_pzs": True, + "self_link": "self_link_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_type": "source_type_value", + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "image": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + image="image_value", + image_resource=compute.Image(archive_size_bytes=1922), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/images/{image}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchImageRequest(), + project="project_value", + image="image_value", + image_resource=compute.Image(archive_size_bytes=1922), + ) + + +def test_patch_unary_rest_error(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyImageRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicyImageRequest, +): + transport_class = transports.ImagesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "globalSetPolicyRequestResource", + "project", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.ImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), + ) + client = ImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ImagesRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.ImagesRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.SetIamPolicyImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicyImageRequest +): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "resource": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + resource="resource_value", + global_set_policy_request_resource=compute.GlobalSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/images/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicyImageRequest(), + project="project_value", + resource="resource_value", + global_set_policy_request_resource=compute.GlobalSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsImageRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = ImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicyImageRequest, -): +def test_set_labels_rest_required_fields(request_type=compute.SetLabelsImageRequest): transport_class = transports.ImagesRestTransport request_init = {} @@ -3346,7 +5140,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3356,7 +5150,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3372,7 +5166,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3391,28 +5185,28 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_set_labels_rest_unset_required_fields(): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( - "globalSetPolicyRequestResource", + "globalSetLabelsRequestResource", "project", "resource", ) @@ -3421,7 +5215,7 @@ def test_set_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.ImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ImagesRestInterceptor(), @@ -3432,9 +5226,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ImagesRestInterceptor, "post_set_iam_policy" + transports.ImagesRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.ImagesRestInterceptor, "pre_set_iam_policy" + transports.ImagesRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3449,17 +5243,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicyImageRequest() + request = compute.SetLabelsImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.set_labels( request, metadata=[ ("key", "val"), @@ -3471,8 +5265,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicyImageRequest +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsImageRequest ): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3481,82 +5275,9 @@ def test_set_iam_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "resource": "sample2"} - request_init["global_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, } request = request_type(request_init) @@ -3569,10 +5290,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.set_labels(request) -def test_set_iam_policy_rest_flattened(): +def test_set_labels_rest_flattened(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3581,7 +5302,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "resource": "sample2"} @@ -3590,8 +5311,8 @@ def test_set_iam_policy_rest_flattened(): mock_args = dict( project="project_value", resource="resource_value", - global_set_policy_request_resource=compute.GlobalSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) mock_args.update(sample_request) @@ -3599,25 +5320,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.set_labels(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/images/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/global/images/{resource}/setLabels" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_set_labels_rest_flattened_error(transport: str = "rest"): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3626,17 +5347,17 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicyImageRequest(), + client.set_labels( + compute.SetLabelsImageRequest(), project="project_value", resource="resource_value", - global_set_policy_request_resource=compute.GlobalSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) -def test_set_iam_policy_rest_error(): +def test_set_labels_rest_error(): client = ImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3701,28 +5422,6 @@ def test_set_labels_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_labels_unary_rest_required_fields( @@ -4325,6 +6024,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ImagesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_images_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4366,6 +6078,14 @@ def test_images_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_images_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_instance_group_managers.py b/tests/unit/gapic/compute_v1/test_instance_group_managers.py index 4dda887a5..eb059863c 100644 --- a/tests/unit/gapic/compute_v1/test_instance_group_managers.py +++ b/tests/unit/gapic/compute_v1/test_instance_group_managers.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -555,7 +557,7 @@ def test_instance_group_managers_client_client_options_credentials_file( dict, ], ) -def test_abandon_instances_unary_rest(request_type): +def test_abandon_instances_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -606,10 +608,10 @@ def test_abandon_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.abandon_instances_unary(request) + response = client.abandon_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -634,7 +636,7 @@ def test_abandon_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_abandon_instances_unary_rest_required_fields( +def test_abandon_instances_rest_required_fields( request_type=compute.AbandonInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -708,14 +710,14 @@ def test_abandon_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.abandon_instances_unary(request) + response = client.abandon_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_abandon_instances_unary_rest_unset_required_fields(): +def test_abandon_instances_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -735,7 +737,7 @@ def test_abandon_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_abandon_instances_unary_rest_interceptors(null_interceptor): +def test_abandon_instances_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -775,7 +777,7 @@ def test_abandon_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.abandon_instances_unary( + client.abandon_instances( request, metadata=[ ("key", "val"), @@ -787,7 +789,7 @@ def test_abandon_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_abandon_instances_unary_rest_bad_request( +def test_abandon_instances_rest_bad_request( transport: str = "rest", request_type=compute.AbandonInstancesInstanceGroupManagerRequest, ): @@ -816,10 +818,10 @@ def test_abandon_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.abandon_instances_unary(request) + client.abandon_instances(request) -def test_abandon_instances_unary_rest_flattened(): +def test_abandon_instances_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -856,7 +858,7 @@ def test_abandon_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.abandon_instances_unary(**mock_args) + client.abandon_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -869,7 +871,7 @@ def test_abandon_instances_unary_rest_flattened(): ) -def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_abandon_instances_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -878,7 +880,7 @@ def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.abandon_instances_unary( + client.abandon_instances( compute.AbandonInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", @@ -889,7 +891,7 @@ def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): ) -def test_abandon_instances_unary_rest_error(): +def test_abandon_instances_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -898,57 +900,76 @@ def test_abandon_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListInstanceGroupManagersRequest, + compute.AbandonInstancesInstanceGroupManagerRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_abandon_instances_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_abandon_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagerAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagerAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.abandon_instances_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert isinstance(response, compute.Operation) -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListInstanceGroupManagersRequest, +def test_abandon_instances_unary_rest_required_fields( + request_type=compute.AbandonInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} + request_init["instance_group_manager"] = "" request_init["project"] = "" + request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -960,32 +981,29 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).abandon_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).abandon_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -994,7 +1012,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagerAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1005,49 +1023,46 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagerAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.abandon_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_abandon_instances_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.abandon_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "instanceGroupManager", + "instanceGroupManagersAbandonInstancesRequestResource", + "project", + "zone", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_abandon_instances_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1060,9 +1075,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_aggregated_list" + transports.InstanceGroupManagersRestInterceptor, "post_abandon_instances" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_aggregated_list" + transports.InstanceGroupManagersRestInterceptor, "pre_abandon_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1077,19 +1092,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupManagerAggregatedList.to_json( - compute.InstanceGroupManagerAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListInstanceGroupManagersRequest() + request = compute.AbandonInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagerAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.abandon_instances_unary( request, metadata=[ ("key", "val"), @@ -1101,9 +1114,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( +def test_abandon_instances_unary_rest_bad_request( transport: str = "rest", - request_type=compute.AggregatedListInstanceGroupManagersRequest, + request_type=compute.AbandonInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1111,7 +1124,14 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_abandon_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1123,10 +1143,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.abandon_instances_unary(request) -def test_aggregated_list_rest_flattened(): +def test_abandon_instances_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1135,41 +1155,48 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagerAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_abandon_instances_request_resource=compute.InstanceGroupManagersAbandonInstancesRequest( + instances=["instances_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagerAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.abandon_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/instanceGroupManagers" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/abandonInstances" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1178,185 +1205,77 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListInstanceGroupManagersRequest(), + client.abandon_instances_unary( + compute.AbandonInstancesInstanceGroupManagerRequest(), project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_abandon_instances_request_resource=compute.InstanceGroupManagersAbandonInstancesRequest( + instances=["instances_value"] + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_abandon_instances_unary_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.AggregatedListInstanceGroupManagersRequest, + dict, + ], +) +def test_aggregated_list_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + transport="rest", ) + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupManagerAggregatedList( - items={ - "a": compute.InstanceGroupManagersScopedList(), - "b": compute.InstanceGroupManagersScopedList(), - "c": compute.InstanceGroupManagersScopedList(), - }, - next_page_token="abc", - ), - compute.InstanceGroupManagerAggregatedList( - items={}, - next_page_token="def", - ), - compute.InstanceGroupManagerAggregatedList( - items={ - "g": compute.InstanceGroupManagersScopedList(), - }, - next_page_token="ghi", - ), - compute.InstanceGroupManagerAggregatedList( - items={ - "h": compute.InstanceGroupManagersScopedList(), - "i": compute.InstanceGroupManagersScopedList(), - }, - ), + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagerAggregatedList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + unreachables=["unreachables_value"], ) - # Two responses for two calls - response = response + response - # Wrap the values into proper Response objs - response = tuple( - compute.InstanceGroupManagerAggregatedList.to_json(x) for x in response + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagerAggregatedList.to_json( + return_value ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.InstanceGroupManagersScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == ( - str, - compute.InstanceGroupManagersScopedList, - ) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.InstanceGroupManagersScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize( - "request_type", - [ - compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, - dict, - ], -) -def test_apply_updates_to_instances_unary_rest(request_type): - client = InstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "instance_group_manager": "sample3", - } - request_init["instance_group_managers_apply_updates_request_resource"] = { - "all_instances": True, - "instances": ["instances_value_1", "instances_value_2"], - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - } - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.apply_updates_to_instances_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_apply_updates_to_instances_unary_rest_required_fields( - request_type=compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListInstanceGroupManagersRequest, ): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} - request_init["instance_group_manager"] = "" request_init["project"] = "" - request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1368,27 +1287,32 @@ def test_apply_updates_to_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" - jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "instanceGroupManager" in jsonified_request - assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "zone" in jsonified_request - assert jsonified_request["zone"] == "zone_value" client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1397,7 +1321,7 @@ def test_apply_updates_to_instances_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceGroupManagerAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1408,46 +1332,49 @@ def test_apply_updates_to_instances_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupManagerAggregatedList.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.apply_updates_to_instances_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_apply_updates_to_instances_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.apply_updates_to_instances._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) - & set( + set( ( - "instanceGroupManager", - "instanceGroupManagersApplyUpdatesRequestResource", - "project", - "zone", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1460,11 +1387,9 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, - "post_apply_updates_to_instances", + transports.InstanceGroupManagersRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, - "pre_apply_updates_to_instances", + transports.InstanceGroupManagersRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1479,17 +1404,19 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InstanceGroupManagerAggregatedList.to_json( + compute.InstanceGroupManagerAggregatedList() + ) - request = compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest() + request = compute.AggregatedListInstanceGroupManagersRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InstanceGroupManagerAggregatedList - client.apply_updates_to_instances_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -1501,9 +1428,9 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_apply_updates_to_instances_unary_rest_bad_request( +def test_aggregated_list_rest_bad_request( transport: str = "rest", - request_type=compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, + request_type=compute.AggregatedListInstanceGroupManagersRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1511,17 +1438,7 @@ def test_apply_updates_to_instances_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "instance_group_manager": "sample3", - } - request_init["instance_group_managers_apply_updates_request_resource"] = { - "all_instances": True, - "instances": ["instances_value_1", "instances_value_2"], - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1533,10 +1450,10 @@ def test_apply_updates_to_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.apply_updates_to_instances_unary(request) + client.aggregated_list(request) -def test_apply_updates_to_instances_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1545,48 +1462,41 @@ def test_apply_updates_to_instances_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceGroupManagerAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance_group_manager": "sample3", - } + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - zone="zone_value", - instance_group_manager="instance_group_manager_value", - instance_group_managers_apply_updates_request_resource=compute.InstanceGroupManagersApplyUpdatesRequest( - all_instances=True - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupManagerAggregatedList.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.apply_updates_to_instances_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/applyUpdatesToInstances" + "%s/compute/v1/projects/{project}/aggregated/instanceGroupManagers" % client.transport._host, args[1], ) -def test_apply_updates_to_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1595,31 +1505,95 @@ def test_apply_updates_to_instances_unary_rest_flattened_error(transport: str = # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.apply_updates_to_instances_unary( - compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest(), + client.aggregated_list( + compute.AggregatedListInstanceGroupManagersRequest(), project="project_value", - zone="zone_value", - instance_group_manager="instance_group_manager_value", - instance_group_managers_apply_updates_request_resource=compute.InstanceGroupManagersApplyUpdatesRequest( - all_instances=True - ), ) -def test_apply_updates_to_instances_unary_rest_error(): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = InstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) - -@pytest.mark.parametrize( - "request_type", - [ - compute.CreateInstancesInstanceGroupManagerRequest, - dict, - ], -) -def test_create_instances_unary_rest(request_type): + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupManagerAggregatedList( + items={ + "a": compute.InstanceGroupManagersScopedList(), + "b": compute.InstanceGroupManagersScopedList(), + "c": compute.InstanceGroupManagersScopedList(), + }, + next_page_token="abc", + ), + compute.InstanceGroupManagerAggregatedList( + items={}, + next_page_token="def", + ), + compute.InstanceGroupManagerAggregatedList( + items={ + "g": compute.InstanceGroupManagersScopedList(), + }, + next_page_token="ghi", + ), + compute.InstanceGroupManagerAggregatedList( + items={ + "h": compute.InstanceGroupManagersScopedList(), + "i": compute.InstanceGroupManagersScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InstanceGroupManagerAggregatedList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.InstanceGroupManagersScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == ( + str, + compute.InstanceGroupManagersScopedList, + ) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.InstanceGroupManagersScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, + dict, + ], +) +def test_apply_updates_to_instances_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1631,15 +1605,11 @@ def test_create_instances_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_create_instances_request_resource"] = { - "instances": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", } request = request_type(request_init) @@ -1677,10 +1647,10 @@ def test_create_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_instances_unary(request) + response = client.apply_updates_to_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1705,8 +1675,8 @@ def test_create_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_create_instances_unary_rest_required_fields( - request_type=compute.CreateInstancesInstanceGroupManagerRequest, +def test_apply_updates_to_instances_rest_required_fields( + request_type=compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -1725,7 +1695,7 @@ def test_create_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_instances._get_unset_required_fields(jsonified_request) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1736,9 +1706,7 @@ def test_create_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_instances._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1779,25 +1747,25 @@ def test_create_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_instances_unary(request) + response = client.apply_updates_to_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_instances_unary_rest_unset_required_fields(): +def test_apply_updates_to_instances_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_instances._get_unset_required_fields({}) + unset_fields = transport.apply_updates_to_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instanceGroupManager", - "instanceGroupManagersCreateInstancesRequestResource", + "instanceGroupManagersApplyUpdatesRequestResource", "project", "zone", ) @@ -1806,7 +1774,7 @@ def test_create_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_instances_unary_rest_interceptors(null_interceptor): +def test_apply_updates_to_instances_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1819,9 +1787,11 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_create_instances" + transports.InstanceGroupManagersRestInterceptor, + "post_apply_updates_to_instances", ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_create_instances" + transports.InstanceGroupManagersRestInterceptor, + "pre_apply_updates_to_instances", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1838,7 +1808,7 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.CreateInstancesInstanceGroupManagerRequest() + request = compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1846,7 +1816,7 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.create_instances_unary( + client.apply_updates_to_instances( request, metadata=[ ("key", "val"), @@ -1858,9 +1828,9 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_instances_unary_rest_bad_request( +def test_apply_updates_to_instances_rest_bad_request( transport: str = "rest", - request_type=compute.CreateInstancesInstanceGroupManagerRequest, + request_type=compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1873,15 +1843,11 @@ def test_create_instances_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_create_instances_request_resource"] = { - "instances": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", } request = request_type(request_init) @@ -1894,10 +1860,10 @@ def test_create_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_instances_unary(request) + client.apply_updates_to_instances(request) -def test_create_instances_unary_rest_flattened(): +def test_apply_updates_to_instances_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1920,8 +1886,8 @@ def test_create_instances_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_create_instances_request_resource=compute.InstanceGroupManagersCreateInstancesRequest( - instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] + instance_group_managers_apply_updates_request_resource=compute.InstanceGroupManagersApplyUpdatesRequest( + all_instances=True ), ) mock_args.update(sample_request) @@ -1934,20 +1900,20 @@ def test_create_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_instances_unary(**mock_args) + client.apply_updates_to_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/createInstances" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/applyUpdatesToInstances" % client.transport._host, args[1], ) -def test_create_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_apply_updates_to_instances_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1956,18 +1922,18 @@ def test_create_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_instances_unary( - compute.CreateInstancesInstanceGroupManagerRequest(), + client.apply_updates_to_instances( + compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_create_instances_request_resource=compute.InstanceGroupManagersCreateInstancesRequest( - instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] + instance_group_managers_apply_updates_request_resource=compute.InstanceGroupManagersApplyUpdatesRequest( + all_instances=True ), ) -def test_create_instances_unary_rest_error(): +def test_apply_updates_to_instances_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1976,11 +1942,11 @@ def test_create_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteInstanceGroupManagerRequest, + compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_apply_updates_to_instances_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1992,6 +1958,12 @@ def test_delete_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2028,36 +2000,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.apply_updates_to_instances_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteInstanceGroupManagerRequest, +def test_apply_updates_to_instances_unary_rest_required_fields( + request_type=compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -2076,7 +2026,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2087,9 +2037,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2118,9 +2066,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2129,24 +2078,25 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.apply_updates_to_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_apply_updates_to_instances_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.apply_updates_to_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instanceGroupManager", + "instanceGroupManagersApplyUpdatesRequestResource", "project", "zone", ) @@ -2155,7 +2105,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2168,9 +2118,11 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_delete" + transports.InstanceGroupManagersRestInterceptor, + "post_apply_updates_to_instances", ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_delete" + transports.InstanceGroupManagersRestInterceptor, + "pre_apply_updates_to_instances", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2187,7 +2139,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteInstanceGroupManagerRequest() + request = compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2195,7 +2147,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.apply_updates_to_instances_unary( request, metadata=[ ("key", "val"), @@ -2207,8 +2159,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteInstanceGroupManagerRequest +def test_apply_updates_to_instances_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2221,6 +2174,12 @@ def test_delete_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2232,10 +2191,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.apply_updates_to_instances_unary(request) -def test_delete_unary_rest_flattened(): +def test_apply_updates_to_instances_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2258,6 +2217,9 @@ def test_delete_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_apply_updates_request_resource=compute.InstanceGroupManagersApplyUpdatesRequest( + all_instances=True + ), ) mock_args.update(sample_request) @@ -2269,20 +2231,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.apply_updates_to_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/applyUpdatesToInstances" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_apply_updates_to_instances_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2291,15 +2253,18 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteInstanceGroupManagerRequest(), + client.apply_updates_to_instances_unary( + compute.ApplyUpdatesToInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_apply_updates_request_resource=compute.InstanceGroupManagersApplyUpdatesRequest( + all_instances=True + ), ) -def test_delete_unary_rest_error(): +def test_apply_updates_to_instances_unary_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2308,11 +2273,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteInstancesInstanceGroupManagerRequest, + compute.CreateInstancesInstanceGroupManagerRequest, dict, ], ) -def test_delete_instances_unary_rest(request_type): +def test_create_instances_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2324,9 +2289,15 @@ def test_delete_instances_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_delete_instances_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"], - "skip_instances_on_validation_error": True, + request_init["instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -2364,10 +2335,10 @@ def test_delete_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_instances_unary(request) + response = client.create_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2392,8 +2363,8 @@ def test_delete_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_instances_unary_rest_required_fields( - request_type=compute.DeleteInstancesInstanceGroupManagerRequest, +def test_create_instances_rest_required_fields( + request_type=compute.CreateInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -2412,7 +2383,7 @@ def test_delete_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_instances._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2423,7 +2394,7 @@ def test_delete_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_instances._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2466,25 +2437,25 @@ def test_delete_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_instances_unary(request) + response = client.create_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_instances_unary_rest_unset_required_fields(): +def test_create_instances_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_instances._get_unset_required_fields({}) + unset_fields = transport.create_instances._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instanceGroupManager", - "instanceGroupManagersDeleteInstancesRequestResource", + "instanceGroupManagersCreateInstancesRequestResource", "project", "zone", ) @@ -2493,7 +2464,7 @@ def test_delete_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_instances_unary_rest_interceptors(null_interceptor): +def test_create_instances_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2506,9 +2477,9 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_delete_instances" + transports.InstanceGroupManagersRestInterceptor, "post_create_instances" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_delete_instances" + transports.InstanceGroupManagersRestInterceptor, "pre_create_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2525,7 +2496,7 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteInstancesInstanceGroupManagerRequest() + request = compute.CreateInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2533,7 +2504,7 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_instances_unary( + client.create_instances( request, metadata=[ ("key", "val"), @@ -2545,9 +2516,9 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_instances_unary_rest_bad_request( +def test_create_instances_rest_bad_request( transport: str = "rest", - request_type=compute.DeleteInstancesInstanceGroupManagerRequest, + request_type=compute.CreateInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2560,9 +2531,15 @@ def test_delete_instances_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_delete_instances_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"], - "skip_instances_on_validation_error": True, + request_init["instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -2575,10 +2552,10 @@ def test_delete_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_instances_unary(request) + client.create_instances(request) -def test_delete_instances_unary_rest_flattened(): +def test_create_instances_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2601,8 +2578,8 @@ def test_delete_instances_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_delete_instances_request_resource=compute.InstanceGroupManagersDeleteInstancesRequest( - instances=["instances_value"] + instance_group_managers_create_instances_request_resource=compute.InstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) mock_args.update(sample_request) @@ -2615,20 +2592,20 @@ def test_delete_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_instances_unary(**mock_args) + client.create_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/deleteInstances" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/createInstances" % client.transport._host, args[1], ) -def test_delete_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_create_instances_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2637,18 +2614,18 @@ def test_delete_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_instances_unary( - compute.DeleteInstancesInstanceGroupManagerRequest(), + client.create_instances( + compute.CreateInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_delete_instances_request_resource=compute.InstanceGroupManagersDeleteInstancesRequest( - instances=["instances_value"] + instance_group_managers_create_instances_request_resource=compute.InstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) -def test_delete_instances_unary_rest_error(): +def test_create_instances_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2657,11 +2634,11 @@ def test_delete_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, + compute.CreateInstancesInstanceGroupManagerRequest, dict, ], ) -def test_delete_per_instance_configs_unary_rest(request_type): +def test_create_instances_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2673,8 +2650,15 @@ def test_delete_per_instance_configs_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_delete_per_instance_configs_req_resource"] = { - "names": ["names_value_1", "names_value_2"] + request_init["instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -2712,36 +2696,14 @@ def test_delete_per_instance_configs_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_per_instance_configs_unary(request) + response = client.create_instances_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_per_instance_configs_unary_rest_required_fields( - request_type=compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, +def test_create_instances_unary_rest_required_fields( + request_type=compute.CreateInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -2760,7 +2722,7 @@ def test_delete_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2771,7 +2733,9 @@ def test_delete_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2812,25 +2776,25 @@ def test_delete_per_instance_configs_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_per_instance_configs_unary(request) + response = client.create_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_per_instance_configs_unary_rest_unset_required_fields(): +def test_create_instances_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_per_instance_configs._get_unset_required_fields({}) + unset_fields = transport.create_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceGroupManager", - "instanceGroupManagersDeletePerInstanceConfigsReqResource", + "instanceGroupManagersCreateInstancesRequestResource", "project", "zone", ) @@ -2839,7 +2803,7 @@ def test_delete_per_instance_configs_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): +def test_create_instances_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2852,11 +2816,9 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, - "post_delete_per_instance_configs", + transports.InstanceGroupManagersRestInterceptor, "post_create_instances" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, - "pre_delete_per_instance_configs", + transports.InstanceGroupManagersRestInterceptor, "pre_create_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2873,7 +2835,7 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeletePerInstanceConfigsInstanceGroupManagerRequest() + request = compute.CreateInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2881,7 +2843,7 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_per_instance_configs_unary( + client.create_instances_unary( request, metadata=[ ("key", "val"), @@ -2893,9 +2855,9 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_per_instance_configs_unary_rest_bad_request( +def test_create_instances_unary_rest_bad_request( transport: str = "rest", - request_type=compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, + request_type=compute.CreateInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2908,8 +2870,15 @@ def test_delete_per_instance_configs_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_delete_per_instance_configs_req_resource"] = { - "names": ["names_value_1", "names_value_2"] + request_init["instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -2922,10 +2891,10 @@ def test_delete_per_instance_configs_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_per_instance_configs_unary(request) + client.create_instances_unary(request) -def test_delete_per_instance_configs_unary_rest_flattened(): +def test_create_instances_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2948,8 +2917,8 @@ def test_delete_per_instance_configs_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_delete_per_instance_configs_req_resource=compute.InstanceGroupManagersDeletePerInstanceConfigsReq( - names=["names_value"] + instance_group_managers_create_instances_request_resource=compute.InstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) mock_args.update(sample_request) @@ -2962,22 +2931,20 @@ def test_delete_per_instance_configs_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_per_instance_configs_unary(**mock_args) + client.create_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/deletePerInstanceConfigs" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/createInstances" % client.transport._host, args[1], ) -def test_delete_per_instance_configs_unary_rest_flattened_error( - transport: str = "rest", -): +def test_create_instances_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2986,18 +2953,18 @@ def test_delete_per_instance_configs_unary_rest_flattened_error( # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_per_instance_configs_unary( - compute.DeletePerInstanceConfigsInstanceGroupManagerRequest(), + client.create_instances_unary( + compute.CreateInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_delete_per_instance_configs_req_resource=compute.InstanceGroupManagersDeletePerInstanceConfigsReq( - names=["names_value"] + instance_group_managers_create_instances_request_resource=compute.InstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) -def test_delete_per_instance_configs_unary_rest_error(): +def test_create_instances_unary_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3006,11 +2973,11 @@ def test_delete_per_instance_configs_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetInstanceGroupManagerRequest, + compute.DeleteInstanceGroupManagerRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3027,50 +2994,68 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManager( - base_instance_name="base_instance_name_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - instance_group="instance_group_value", - instance_template="instance_template_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - target_pools=["target_pools_value"], - target_size=1185, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManager.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InstanceGroupManager) - assert response.base_instance_name == "base_instance_name_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.instance_group == "instance_group_value" - assert response.instance_template == "instance_template_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.target_pools == ["target_pools_value"] - assert response.target_size == 1185 + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetInstanceGroupManagerRequest): +def test_delete_rest_required_fields( + request_type=compute.DeleteInstanceGroupManagerRequest, +): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} @@ -3088,7 +3073,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupManagerRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3099,7 +3084,9 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupManagerRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3117,7 +3104,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupManagerRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManager() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3128,32 +3115,32 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupManagerRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManager.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceGroupManager", @@ -3165,7 +3152,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3178,9 +3165,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_get" + transports.InstanceGroupManagersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_get" + transports.InstanceGroupManagersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3195,19 +3182,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupManager.to_json( - compute.InstanceGroupManager() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetInstanceGroupManagerRequest() + request = compute.DeleteInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManager + post.return_value = compute.Operation - client.get( + client.delete( request, metadata=[ ("key", "val"), @@ -3219,8 +3204,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetInstanceGroupManagerRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceGroupManagerRequest ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3244,10 +3229,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete(request) -def test_get_rest_flattened(): +def test_delete_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3256,7 +3241,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManager() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -3276,12 +3261,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManager.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -3294,7 +3279,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3303,15 +3288,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetInstanceGroupManagerRequest(), + client.delete( + compute.DeleteInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", ) -def test_get_rest_error(): +def test_delete_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3320,82 +3305,21 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertInstanceGroupManagerRequest, + compute.DeleteInstanceGroupManagerRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["instance_group_manager_resource"] = { - "auto_healing_policies": [ - {"health_check": "health_check_value", "initial_delay_sec": 1778} - ], - "base_instance_name": "base_instance_name_value", - "creation_timestamp": "creation_timestamp_value", - "current_actions": { - "abandoning": 1041, - "creating": 845, - "creating_without_retries": 2589, - "deleting": 844, - "none": 432, - "recreating": 1060, - "refreshing": 1069, - "restarting": 1091, - "resuming": 874, - "starting": 876, - "stopping": 884, - "suspending": 1088, - "verifying": 979, - }, - "description": "description_value", - "distribution_policy": { - "target_shape": "target_shape_value", - "zones": [{"zone": "zone_value"}], - }, - "fingerprint": "fingerprint_value", - "id": 205, - "instance_group": "instance_group_value", - "instance_template": "instance_template_value", - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "region": "region_value", - "self_link": "self_link_value", - "stateful_policy": {"preserved_state": {"disks": {}}}, - "status": { - "autoscaler": "autoscaler_value", - "is_stable": True, - "stateful": { - "has_stateful_config": True, - "per_instance_configs": {"all_effective": True}, - }, - "version_target": {"is_reached": True}, - }, - "target_pools": ["target_pools_value_1", "target_pools_value_2"], - "target_size": 1185, - "update_policy": { - "instance_redistribution_type": "instance_redistribution_type_value", - "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, - "max_unavailable": {}, - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - "replacement_method": "replacement_method_value", - "type_": "type__value", - }, - "versions": [ - { - "instance_template": "instance_template_value", - "name": "name_value", - "target_size": {}, - } - ], - "zone": "zone_value", + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", } request = request_type(request_init) @@ -3433,40 +3357,19 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertInstanceGroupManagerRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} + request_init["instance_group_manager"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3480,22 +3383,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3519,10 +3425,9 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3531,24 +3436,24 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "instanceGroupManagerResource", + "instanceGroupManager", "project", "zone", ) @@ -3557,7 +3462,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3570,9 +3475,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_insert" + transports.InstanceGroupManagersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_insert" + transports.InstanceGroupManagersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3589,7 +3494,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertInstanceGroupManagerRequest() + request = compute.DeleteInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3597,7 +3502,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -3609,8 +3514,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertInstanceGroupManagerRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceGroupManagerRequest ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3618,71 +3523,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["instance_group_manager_resource"] = { - "auto_healing_policies": [ - {"health_check": "health_check_value", "initial_delay_sec": 1778} - ], - "base_instance_name": "base_instance_name_value", - "creation_timestamp": "creation_timestamp_value", - "current_actions": { - "abandoning": 1041, - "creating": 845, - "creating_without_retries": 2589, - "deleting": 844, - "none": 432, - "recreating": 1060, - "refreshing": 1069, - "restarting": 1091, - "resuming": 874, - "starting": 876, - "stopping": 884, - "suspending": 1088, - "verifying": 979, - }, - "description": "description_value", - "distribution_policy": { - "target_shape": "target_shape_value", - "zones": [{"zone": "zone_value"}], - }, - "fingerprint": "fingerprint_value", - "id": 205, - "instance_group": "instance_group_value", - "instance_template": "instance_template_value", - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "region": "region_value", - "self_link": "self_link_value", - "stateful_policy": {"preserved_state": {"disks": {}}}, - "status": { - "autoscaler": "autoscaler_value", - "is_stable": True, - "stateful": { - "has_stateful_config": True, - "per_instance_configs": {"all_effective": True}, - }, - "version_target": {"is_reached": True}, - }, - "target_pools": ["target_pools_value_1", "target_pools_value_2"], - "target_size": 1185, - "update_policy": { - "instance_redistribution_type": "instance_redistribution_type_value", - "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, - "max_unavailable": {}, - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - "replacement_method": "replacement_method_value", - "type_": "type__value", - }, - "versions": [ - { - "instance_template": "instance_template_value", - "name": "name_value", - "target_size": {}, - } - ], - "zone": "zone_value", + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", } request = request_type(request_init) @@ -3695,10 +3539,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3710,19 +3554,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + instance_group_manager="instance_group_manager_value", ) mock_args.update(sample_request) @@ -3734,20 +3576,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3756,21 +3598,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertInstanceGroupManagerRequest(), + client.delete_unary( + compute.DeleteInstanceGroupManagerRequest(), project="project_value", zone="zone_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + instance_group_manager="instance_group_manager_value", ) -def test_insert_unary_rest_error(): +def test_delete_unary_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3779,52 +3615,97 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListInstanceGroupManagersRequest, + compute.DeleteInstancesInstanceGroupManagerRequest, dict, ], ) -def test_list_rest(request_type): +def test_delete_instances_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagerList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.delete_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListInstanceGroupManagersRequest, +def test_delete_instances_rest_required_fields( + request_type=compute.DeleteInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} + request_init["instance_group_manager"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3838,30 +3719,25 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3874,7 +3750,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagerList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3885,42 +3761,37 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.delete_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_delete_instances_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.delete_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "instanceGroupManager", + "instanceGroupManagersDeleteInstancesRequestResource", "project", "zone", ) @@ -3929,7 +3800,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_delete_instances_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3942,9 +3813,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_list" + transports.InstanceGroupManagersRestInterceptor, "post_delete_instances" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_list" + transports.InstanceGroupManagersRestInterceptor, "pre_delete_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3959,19 +3830,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupManagerList.to_json( - compute.InstanceGroupManagerList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListInstanceGroupManagersRequest() + request = compute.DeleteInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagerList + post.return_value = compute.Operation - client.list( + client.delete_instances( request, metadata=[ ("key", "val"), @@ -3983,8 +3852,9 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListInstanceGroupManagersRequest +def test_delete_instances_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3992,7 +3862,15 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4004,10 +3882,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.delete_instances(request) -def test_list_rest_flattened(): +def test_delete_instances_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4016,40 +3894,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagerList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_instances_request_resource=compute.InstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.delete_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/deleteInstances" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_delete_instances_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4058,82 +3944,31 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListInstanceGroupManagersRequest(), + client.delete_instances( + compute.DeleteInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_instances_request_resource=compute.InstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_delete_instances_rest_error(): client = InstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupManagerList( - items=[ - compute.InstanceGroupManager(), - compute.InstanceGroupManager(), - compute.InstanceGroupManager(), - ], - next_page_token="abc", - ), - compute.InstanceGroupManagerList( - items=[], - next_page_token="def", - ), - compute.InstanceGroupManagerList( - items=[ - compute.InstanceGroupManager(), - ], - next_page_token="ghi", - ), - compute.InstanceGroupManagerList( - items=[ - compute.InstanceGroupManager(), - compute.InstanceGroupManager(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.InstanceGroupManagerList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InstanceGroupManager) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListErrorsInstanceGroupManagersRequest, + compute.DeleteInstancesInstanceGroupManagerRequest, dict, ], ) -def test_list_errors_rest(request_type): +def test_delete_instances_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4145,32 +3980,54 @@ def test_list_errors_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListErrorsResponse( - next_page_token="next_page_token_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagersListErrorsResponse.to_json( - return_value - ) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list_errors(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListErrorsPager) - assert response.next_page_token == "next_page_token_value" - + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) -def test_list_errors_rest_required_fields( - request_type=compute.ListErrorsInstanceGroupManagersRequest, + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_instances_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_instances_unary_rest_required_fields( + request_type=compute.DeleteInstancesInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -4189,7 +4046,7 @@ def test_list_errors_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_errors._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4200,17 +4057,9 @@ def test_list_errors_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_errors._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4228,7 +4077,7 @@ def test_list_errors_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListErrorsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4239,45 +4088,37 @@ def test_list_errors_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagersListErrorsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_errors(request) + response = client.delete_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_errors_rest_unset_required_fields(): +def test_delete_instances_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_errors._get_unset_required_fields({}) + unset_fields = transport.delete_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "instanceGroupManager", + "instanceGroupManagersDeleteInstancesRequestResource", "project", "zone", ) @@ -4286,7 +4127,7 @@ def test_list_errors_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_errors_rest_interceptors(null_interceptor): +def test_delete_instances_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4299,9 +4140,9 @@ def test_list_errors_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_list_errors" + transports.InstanceGroupManagersRestInterceptor, "post_delete_instances" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_list_errors" + transports.InstanceGroupManagersRestInterceptor, "pre_delete_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4316,21 +4157,17 @@ def test_list_errors_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.InstanceGroupManagersListErrorsResponse.to_json( - compute.InstanceGroupManagersListErrorsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListErrorsInstanceGroupManagersRequest() + request = compute.DeleteInstancesInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagersListErrorsResponse + post.return_value = compute.Operation - client.list_errors( + client.delete_instances_unary( request, metadata=[ ("key", "val"), @@ -4342,8 +4179,9 @@ def test_list_errors_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_errors_rest_bad_request( - transport: str = "rest", request_type=compute.ListErrorsInstanceGroupManagersRequest +def test_delete_instances_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteInstancesInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4356,6 +4194,10 @@ def test_list_errors_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4367,10 +4209,10 @@ def test_list_errors_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_errors(request) + client.delete_instances_unary(request) -def test_list_errors_rest_flattened(): +def test_delete_instances_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4379,7 +4221,7 @@ def test_list_errors_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListErrorsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4393,33 +4235,34 @@ def test_list_errors_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_instances_request_resource=compute.InstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManagersListErrorsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_errors(**mock_args) + client.delete_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/listErrors" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/deleteInstances" % client.transport._host, args[1], ) -def test_list_errors_rest_flattened_error(transport: str = "rest"): +def test_delete_instances_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4428,89 +4271,31 @@ def test_list_errors_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_errors( - compute.ListErrorsInstanceGroupManagersRequest(), + client.delete_instances_unary( + compute.DeleteInstancesInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_instances_request_resource=compute.InstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) -def test_list_errors_rest_pager(transport: str = "rest"): +def test_delete_instances_unary_rest_error(): client = InstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupManagersListErrorsResponse( - items=[ - compute.InstanceManagedByIgmError(), - compute.InstanceManagedByIgmError(), - compute.InstanceManagedByIgmError(), - ], - next_page_token="abc", - ), - compute.InstanceGroupManagersListErrorsResponse( - items=[], - next_page_token="def", - ), - compute.InstanceGroupManagersListErrorsResponse( - items=[ - compute.InstanceManagedByIgmError(), - ], - next_page_token="ghi", - ), - compute.InstanceGroupManagersListErrorsResponse( - items=[ - compute.InstanceManagedByIgmError(), - compute.InstanceManagedByIgmError(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.InstanceGroupManagersListErrorsResponse.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance_group_manager": "sample3", - } - - pager = client.list_errors(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InstanceManagedByIgmError) for i in results) - - pages = list(client.list_errors(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListManagedInstancesInstanceGroupManagersRequest, + compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict, ], ) -def test_list_managed_instances_rest(request_type): +def test_delete_per_instance_configs_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4522,53 +4307,94 @@ def test_list_managed_instances_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_delete_per_instance_configs_req_resource"] = { + "names": ["names_value_1", "names_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListManagedInstancesResponse( - next_page_token="next_page_token_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.InstanceGroupManagersListManagedInstancesResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_managed_instances(request) + response = client.delete_per_instance_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListManagedInstancesPager) - assert response.next_page_token == "next_page_token_value" - - -def test_list_managed_instances_rest_required_fields( - request_type=compute.ListManagedInstancesInstanceGroupManagersRequest, -): - transport_class = transports.InstanceGroupManagersRestTransport - - request_init = {} - request_init["instance_group_manager"] = "" - request_init["project"] = "" - request_init["zone"] = "" - request = request_type(request_init) - jsonified_request = json.loads( - request_type.to_json( - request, including_default_value_fields=False, use_integers_for_enums=False - ) - ) - + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_delete_per_instance_configs_rest_required_fields( + request_type=compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + # verify fields with default values are dropped unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_managed_instances._get_unset_required_fields(jsonified_request) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4579,17 +4405,7 @@ def test_list_managed_instances_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_managed_instances._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4607,7 +4423,7 @@ def test_list_managed_instances_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListManagedInstancesResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4621,44 +4437,34 @@ def test_list_managed_instances_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.InstanceGroupManagersListManagedInstancesResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_managed_instances(request) + response = client.delete_per_instance_configs(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_managed_instances_rest_unset_required_fields(): +def test_delete_per_instance_configs_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_managed_instances._get_unset_required_fields({}) + unset_fields = transport.delete_per_instance_configs._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( "instanceGroupManager", + "instanceGroupManagersDeletePerInstanceConfigsReqResource", "project", "zone", ) @@ -4667,7 +4473,7 @@ def test_list_managed_instances_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_managed_instances_rest_interceptors(null_interceptor): +def test_delete_per_instance_configs_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4680,9 +4486,11 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_list_managed_instances" + transports.InstanceGroupManagersRestInterceptor, + "post_delete_per_instance_configs", ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_list_managed_instances" + transports.InstanceGroupManagersRestInterceptor, + "pre_delete_per_instance_configs", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4697,21 +4505,17 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.InstanceGroupManagersListManagedInstancesResponse.to_json( - compute.InstanceGroupManagersListManagedInstancesResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListManagedInstancesInstanceGroupManagersRequest() + request = compute.DeletePerInstanceConfigsInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagersListManagedInstancesResponse + post.return_value = compute.Operation - client.list_managed_instances( + client.delete_per_instance_configs( request, metadata=[ ("key", "val"), @@ -4723,9 +4527,9 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_managed_instances_rest_bad_request( +def test_delete_per_instance_configs_rest_bad_request( transport: str = "rest", - request_type=compute.ListManagedInstancesInstanceGroupManagersRequest, + request_type=compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4738,6 +4542,9 @@ def test_list_managed_instances_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_delete_per_instance_configs_req_resource"] = { + "names": ["names_value_1", "names_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4749,10 +4556,10 @@ def test_list_managed_instances_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_managed_instances(request) + client.delete_per_instance_configs(request) -def test_list_managed_instances_rest_flattened(): +def test_delete_per_instance_configs_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4761,7 +4568,7 @@ def test_list_managed_instances_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListManagedInstancesResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4775,35 +4582,34 @@ def test_list_managed_instances_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_per_instance_configs_req_resource=compute.InstanceGroupManagersDeletePerInstanceConfigsReq( + names=["names_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.InstanceGroupManagersListManagedInstancesResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_managed_instances(**mock_args) + client.delete_per_instance_configs(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/listManagedInstances" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/deletePerInstanceConfigs" % client.transport._host, args[1], ) -def test_list_managed_instances_rest_flattened_error(transport: str = "rest"): +def test_delete_per_instance_configs_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4812,90 +4618,31 @@ def test_list_managed_instances_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_managed_instances( - compute.ListManagedInstancesInstanceGroupManagersRequest(), + client.delete_per_instance_configs( + compute.DeletePerInstanceConfigsInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_per_instance_configs_req_resource=compute.InstanceGroupManagersDeletePerInstanceConfigsReq( + names=["names_value"] + ), ) -def test_list_managed_instances_rest_pager(transport: str = "rest"): +def test_delete_per_instance_configs_rest_error(): client = InstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupManagersListManagedInstancesResponse( - managed_instances=[ - compute.ManagedInstance(), - compute.ManagedInstance(), - compute.ManagedInstance(), - ], - next_page_token="abc", - ), - compute.InstanceGroupManagersListManagedInstancesResponse( - managed_instances=[], - next_page_token="def", - ), - compute.InstanceGroupManagersListManagedInstancesResponse( - managed_instances=[ - compute.ManagedInstance(), - ], - next_page_token="ghi", - ), - compute.InstanceGroupManagersListManagedInstancesResponse( - managed_instances=[ - compute.ManagedInstance(), - compute.ManagedInstance(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.InstanceGroupManagersListManagedInstancesResponse.to_json(x) - for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance_group_manager": "sample3", - } - - pager = client.list_managed_instances(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ManagedInstance) for i in results) - - pages = list(client.list_managed_instances(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListPerInstanceConfigsInstanceGroupManagersRequest, + compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, dict, ], ) -def test_list_per_instance_configs_rest(request_type): +def test_delete_per_instance_configs_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4907,34 +4654,53 @@ def test_list_per_instance_configs_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_delete_per_instance_configs_req_resource"] = { + "names": ["names_value_1", "names_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp( - next_page_token="next_page_token_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_per_instance_configs(request) + response = client.delete_per_instance_configs_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPerInstanceConfigsPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, compute.Operation) -def test_list_per_instance_configs_rest_required_fields( - request_type=compute.ListPerInstanceConfigsInstanceGroupManagersRequest, +def test_delete_per_instance_configs_unary_rest_required_fields( + request_type=compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -4953,7 +4719,7 @@ def test_list_per_instance_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_per_instance_configs._get_unset_required_fields(jsonified_request) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4964,17 +4730,7 @@ def test_list_per_instance_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_per_instance_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4992,7 +4748,7 @@ def test_list_per_instance_configs_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -5006,44 +4762,34 @@ def test_list_per_instance_configs_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_per_instance_configs(request) + response = client.delete_per_instance_configs_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_per_instance_configs_rest_unset_required_fields(): +def test_delete_per_instance_configs_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_per_instance_configs._get_unset_required_fields({}) + unset_fields = transport.delete_per_instance_configs._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( "instanceGroupManager", + "instanceGroupManagersDeletePerInstanceConfigsReqResource", "project", "zone", ) @@ -5052,7 +4798,7 @@ def test_list_per_instance_configs_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_per_instance_configs_rest_interceptors(null_interceptor): +def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5066,9 +4812,10 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): path_template, "transcode" ) as transcode, mock.patch.object( transports.InstanceGroupManagersRestInterceptor, - "post_list_per_instance_configs", + "post_delete_per_instance_configs", ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_list_per_instance_configs" + transports.InstanceGroupManagersRestInterceptor, + "pre_delete_per_instance_configs", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5083,21 +4830,17 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( - compute.InstanceGroupManagersListPerInstanceConfigsResp() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPerInstanceConfigsInstanceGroupManagersRequest() + request = compute.DeletePerInstanceConfigsInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp + post.return_value = compute.Operation - client.list_per_instance_configs( + client.delete_per_instance_configs_unary( request, metadata=[ ("key", "val"), @@ -5109,9 +4852,9 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_per_instance_configs_rest_bad_request( +def test_delete_per_instance_configs_unary_rest_bad_request( transport: str = "rest", - request_type=compute.ListPerInstanceConfigsInstanceGroupManagersRequest, + request_type=compute.DeletePerInstanceConfigsInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5124,6 +4867,9 @@ def test_list_per_instance_configs_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_delete_per_instance_configs_req_resource"] = { + "names": ["names_value_1", "names_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -5135,10 +4881,10 @@ def test_list_per_instance_configs_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_per_instance_configs(request) + client.delete_per_instance_configs_unary(request) -def test_list_per_instance_configs_rest_flattened(): +def test_delete_per_instance_configs_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5147,7 +4893,7 @@ def test_list_per_instance_configs_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -5161,35 +4907,36 @@ def test_list_per_instance_configs_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_per_instance_configs_req_resource=compute.InstanceGroupManagersDeletePerInstanceConfigsReq( + names=["names_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_per_instance_configs(**mock_args) + client.delete_per_instance_configs_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/listPerInstanceConfigs" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/deletePerInstanceConfigs" % client.transport._host, args[1], ) -def test_list_per_instance_configs_rest_flattened_error(transport: str = "rest"): +def test_delete_per_instance_configs_unary_rest_flattened_error( + transport: str = "rest", +): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5198,90 +4945,31 @@ def test_list_per_instance_configs_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_per_instance_configs( - compute.ListPerInstanceConfigsInstanceGroupManagersRequest(), + client.delete_per_instance_configs_unary( + compute.DeletePerInstanceConfigsInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", + instance_group_managers_delete_per_instance_configs_req_resource=compute.InstanceGroupManagersDeletePerInstanceConfigsReq( + names=["names_value"] + ), ) -def test_list_per_instance_configs_rest_pager(transport: str = "rest"): +def test_delete_per_instance_configs_unary_rest_error(): client = InstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupManagersListPerInstanceConfigsResp( - items=[ - compute.PerInstanceConfig(), - compute.PerInstanceConfig(), - compute.PerInstanceConfig(), - ], - next_page_token="abc", - ), - compute.InstanceGroupManagersListPerInstanceConfigsResp( - items=[], - next_page_token="def", - ), - compute.InstanceGroupManagersListPerInstanceConfigsResp( - items=[ - compute.PerInstanceConfig(), - ], - next_page_token="ghi", - ), - compute.InstanceGroupManagersListPerInstanceConfigsResp( - items=[ - compute.PerInstanceConfig(), - compute.PerInstanceConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json(x) - for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance_group_manager": "sample3", - } - - pager = client.list_per_instance_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.PerInstanceConfig) for i in results) - - pages = list(client.list_per_instance_configs(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchInstanceGroupManagerRequest, + compute.GetInstanceGroupManagerRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_get_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5293,138 +4981,55 @@ def test_patch_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_manager_resource"] = { - "auto_healing_policies": [ - {"health_check": "health_check_value", "initial_delay_sec": 1778} - ], - "base_instance_name": "base_instance_name_value", - "creation_timestamp": "creation_timestamp_value", - "current_actions": { - "abandoning": 1041, - "creating": 845, - "creating_without_retries": 2589, - "deleting": 844, - "none": 432, - "recreating": 1060, - "refreshing": 1069, - "restarting": 1091, - "resuming": 874, - "starting": 876, - "stopping": 884, - "suspending": 1088, - "verifying": 979, - }, - "description": "description_value", - "distribution_policy": { - "target_shape": "target_shape_value", - "zones": [{"zone": "zone_value"}], - }, - "fingerprint": "fingerprint_value", - "id": 205, - "instance_group": "instance_group_value", - "instance_template": "instance_template_value", - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "region": "region_value", - "self_link": "self_link_value", - "stateful_policy": {"preserved_state": {"disks": {}}}, - "status": { - "autoscaler": "autoscaler_value", - "is_stable": True, - "stateful": { - "has_stateful_config": True, - "per_instance_configs": {"all_effective": True}, - }, - "version_target": {"is_reached": True}, - }, - "target_pools": ["target_pools_value_1", "target_pools_value_2"], - "target_size": 1185, - "update_policy": { - "instance_redistribution_type": "instance_redistribution_type_value", - "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, - "max_unavailable": {}, - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - "replacement_method": "replacement_method_value", - "type_": "type__value", - }, - "versions": [ - { - "instance_template": "instance_template_value", - "name": "name_value", - "target_size": {}, - } - ], - "zone": "zone_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.InstanceGroupManager( + base_instance_name="base_instance_name_value", creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + instance_group="instance_group_value", + instance_template="instance_template_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", + target_pools=["target_pools_value"], + target_size=1185, zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupManager.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.InstanceGroupManager) + assert response.base_instance_name == "base_instance_name_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.instance_group == "instance_group_value" + assert response.instance_template == "instance_template_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" + assert response.target_pools == ["target_pools_value"] + assert response.target_size == 1185 assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchInstanceGroupManagerRequest, -): +def test_get_rest_required_fields(request_type=compute.GetInstanceGroupManagerRequest): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} @@ -5442,7 +5047,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -5453,9 +5058,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -5473,7 +5076,7 @@ def test_patch_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceGroupManager() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -5484,37 +5087,35 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupManager.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instanceGroupManager", - "instanceGroupManagerResource", "project", "zone", ) @@ -5523,7 +5124,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5536,9 +5137,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_patch" + transports.InstanceGroupManagersRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_patch" + transports.InstanceGroupManagersRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5553,17 +5154,19 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InstanceGroupManager.to_json( + compute.InstanceGroupManager() + ) - request = compute.PatchInstanceGroupManagerRequest() + request = compute.GetInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InstanceGroupManager - client.patch_unary( + client.get( request, metadata=[ ("key", "val"), @@ -5575,8 +5178,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchInstanceGroupManagerRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetInstanceGroupManagerRequest ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5589,6 +5192,105 @@ def test_patch_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManager() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManager.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_get_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceGroupManagerRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} request_init["instance_group_manager_resource"] = { "auto_healing_policies": [ {"health_check": "health_check_value", "initial_delay_sec": 1778} @@ -5656,6 +5358,5244 @@ def test_patch_unary_rest_bad_request( } request = request_type(request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManagerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceGroupManagerRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_insert_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceGroupManagerRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManagerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceGroupManagerRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_insert_unary_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListInstanceGroupManagersRequest, + dict, + ], +) +def test_list_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagerList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListInstanceGroupManagersRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagerList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceGroupManagerList.to_json( + compute.InstanceGroupManagerList() + ) + + request = compute.ListInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroupManagerList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListInstanceGroupManagersRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagerList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagerList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListInstanceGroupManagersRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupManagerList( + items=[ + compute.InstanceGroupManager(), + compute.InstanceGroupManager(), + compute.InstanceGroupManager(), + ], + next_page_token="abc", + ), + compute.InstanceGroupManagerList( + items=[], + next_page_token="def", + ), + compute.InstanceGroupManagerList( + items=[ + compute.InstanceGroupManager(), + ], + next_page_token="ghi", + ), + compute.InstanceGroupManagerList( + items=[ + compute.InstanceGroupManager(), + compute.InstanceGroupManager(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.InstanceGroupManagerList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InstanceGroupManager) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListErrorsInstanceGroupManagersRequest, + dict, + ], +) +def test_list_errors_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListErrorsResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagersListErrorsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_errors(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListErrorsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_errors_rest_required_fields( + request_type=compute.ListErrorsInstanceGroupManagersRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_errors._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_errors._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListErrorsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagersListErrorsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_errors(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_errors_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_errors._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_errors_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_list_errors" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_list_errors" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.InstanceGroupManagersListErrorsResponse.to_json( + compute.InstanceGroupManagersListErrorsResponse() + ) + ) + + request = compute.ListErrorsInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroupManagersListErrorsResponse + + client.list_errors( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_errors_rest_bad_request( + transport: str = "rest", request_type=compute.ListErrorsInstanceGroupManagersRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_errors(request) + + +def test_list_errors_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListErrorsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManagersListErrorsResponse.to_json( + return_value + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_errors(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/listErrors" + % client.transport._host, + args[1], + ) + + +def test_list_errors_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_errors( + compute.ListErrorsInstanceGroupManagersRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_list_errors_rest_pager(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupManagersListErrorsResponse( + items=[ + compute.InstanceManagedByIgmError(), + compute.InstanceManagedByIgmError(), + compute.InstanceManagedByIgmError(), + ], + next_page_token="abc", + ), + compute.InstanceGroupManagersListErrorsResponse( + items=[], + next_page_token="def", + ), + compute.InstanceGroupManagersListErrorsResponse( + items=[ + compute.InstanceManagedByIgmError(), + ], + next_page_token="ghi", + ), + compute.InstanceGroupManagersListErrorsResponse( + items=[ + compute.InstanceManagedByIgmError(), + compute.InstanceManagedByIgmError(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InstanceGroupManagersListErrorsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + pager = client.list_errors(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InstanceManagedByIgmError) for i in results) + + pages = list(client.list_errors(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListManagedInstancesInstanceGroupManagersRequest, + dict, + ], +) +def test_list_managed_instances_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListManagedInstancesResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.InstanceGroupManagersListManagedInstancesResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_managed_instances(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListManagedInstancesPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_managed_instances_rest_required_fields( + request_type=compute.ListManagedInstancesInstanceGroupManagersRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_managed_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_managed_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListManagedInstancesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.InstanceGroupManagersListManagedInstancesResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_managed_instances(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_managed_instances_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_managed_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_managed_instances_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_list_managed_instances" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_list_managed_instances" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.InstanceGroupManagersListManagedInstancesResponse.to_json( + compute.InstanceGroupManagersListManagedInstancesResponse() + ) + ) + + request = compute.ListManagedInstancesInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroupManagersListManagedInstancesResponse + + client.list_managed_instances( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_managed_instances_rest_bad_request( + transport: str = "rest", + request_type=compute.ListManagedInstancesInstanceGroupManagersRequest, +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_managed_instances(request) + + +def test_list_managed_instances_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListManagedInstancesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.InstanceGroupManagersListManagedInstancesResponse.to_json( + return_value + ) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_managed_instances(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/listManagedInstances" + % client.transport._host, + args[1], + ) + + +def test_list_managed_instances_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_managed_instances( + compute.ListManagedInstancesInstanceGroupManagersRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_list_managed_instances_rest_pager(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupManagersListManagedInstancesResponse( + managed_instances=[ + compute.ManagedInstance(), + compute.ManagedInstance(), + compute.ManagedInstance(), + ], + next_page_token="abc", + ), + compute.InstanceGroupManagersListManagedInstancesResponse( + managed_instances=[], + next_page_token="def", + ), + compute.InstanceGroupManagersListManagedInstancesResponse( + managed_instances=[ + compute.ManagedInstance(), + ], + next_page_token="ghi", + ), + compute.InstanceGroupManagersListManagedInstancesResponse( + managed_instances=[ + compute.ManagedInstance(), + compute.ManagedInstance(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InstanceGroupManagersListManagedInstancesResponse.to_json(x) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + pager = client.list_managed_instances(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ManagedInstance) for i in results) + + pages = list(client.list_managed_instances(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPerInstanceConfigsInstanceGroupManagersRequest, + dict, + ], +) +def test_list_per_instance_configs_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_per_instance_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPerInstanceConfigsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_per_instance_configs_rest_required_fields( + request_type=compute.ListPerInstanceConfigsInstanceGroupManagersRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_per_instance_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_per_instance_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_per_instance_configs(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_per_instance_configs_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_per_instance_configs._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_per_instance_configs_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, + "post_list_per_instance_configs", + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_list_per_instance_configs" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( + compute.InstanceGroupManagersListPerInstanceConfigsResp() + ) + ) + + request = compute.ListPerInstanceConfigsInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp + + client.list_per_instance_configs( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_per_instance_configs_rest_bad_request( + transport: str = "rest", + request_type=compute.ListPerInstanceConfigsInstanceGroupManagersRequest, +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_per_instance_configs(request) + + +def test_list_per_instance_configs_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json( + return_value + ) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_per_instance_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/listPerInstanceConfigs" + % client.transport._host, + args[1], + ) + + +def test_list_per_instance_configs_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_per_instance_configs( + compute.ListPerInstanceConfigsInstanceGroupManagersRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_list_per_instance_configs_rest_pager(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupManagersListPerInstanceConfigsResp( + items=[ + compute.PerInstanceConfig(), + compute.PerInstanceConfig(), + compute.PerInstanceConfig(), + ], + next_page_token="abc", + ), + compute.InstanceGroupManagersListPerInstanceConfigsResp( + items=[], + next_page_token="def", + ), + compute.InstanceGroupManagersListPerInstanceConfigsResp( + items=[ + compute.PerInstanceConfig(), + ], + next_page_token="ghi", + ), + compute.InstanceGroupManagersListPerInstanceConfigsResp( + items=[ + compute.PerInstanceConfig(), + compute.PerInstanceConfig(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InstanceGroupManagersListPerInstanceConfigsResp.to_json(x) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + pager = client.list_per_instance_configs(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.PerInstanceConfig) for i in results) + + pages = list(client.list_per_instance_configs(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchInstanceGroupManagerRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_patch_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagerResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchInstanceGroupManagerRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_patch_unary_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_per_instance_configs_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_patch_per_instance_configs_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_per_instance_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_per_instance_configs_rest_required_fields( + request_type=compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_per_instance_configs(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_per_instance_configs_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_per_instance_configs._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagersPatchPerInstanceConfigsReqResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_per_instance_configs_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, + "post_patch_per_instance_configs", + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, + "pre_patch_per_instance_configs", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchPerInstanceConfigsInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_per_instance_configs( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_per_instance_configs_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_patch_per_instance_configs_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_per_instance_configs(request) + + +def test_patch_per_instance_configs_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_patch_per_instance_configs_req_resource=compute.InstanceGroupManagersPatchPerInstanceConfigsReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_per_instance_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/patchPerInstanceConfigs" + % client.transport._host, + args[1], + ) + + +def test_patch_per_instance_configs_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_per_instance_configs( + compute.PatchPerInstanceConfigsInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_patch_per_instance_configs_req_resource=compute.InstanceGroupManagersPatchPerInstanceConfigsReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + + +def test_patch_per_instance_configs_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_per_instance_configs_unary_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_patch_per_instance_configs_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_per_instance_configs_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_per_instance_configs_unary_rest_required_fields( + request_type=compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_per_instance_configs_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_per_instance_configs_unary_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_per_instance_configs._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagersPatchPerInstanceConfigsReqResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, + "post_patch_per_instance_configs", + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, + "pre_patch_per_instance_configs", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchPerInstanceConfigsInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_per_instance_configs_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_per_instance_configs_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_patch_per_instance_configs_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_per_instance_configs_unary(request) + + +def test_patch_per_instance_configs_unary_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_patch_per_instance_configs_req_resource=compute.InstanceGroupManagersPatchPerInstanceConfigsReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_per_instance_configs_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/patchPerInstanceConfigs" + % client.transport._host, + args[1], + ) + + +def test_patch_per_instance_configs_unary_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_per_instance_configs_unary( + compute.PatchPerInstanceConfigsInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_patch_per_instance_configs_req_resource=compute.InstanceGroupManagersPatchPerInstanceConfigsReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + + +def test_patch_per_instance_configs_unary_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RecreateInstancesInstanceGroupManagerRequest, + dict, + ], +) +def test_recreate_instances_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_recreate_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.recreate_instances(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_recreate_instances_rest_required_fields( + request_type=compute.RecreateInstancesInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.recreate_instances(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_recreate_instances_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.recreate_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagersRecreateInstancesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_recreate_instances_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_recreate_instances" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_recreate_instances" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RecreateInstancesInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.recreate_instances( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_recreate_instances_rest_bad_request( + transport: str = "rest", + request_type=compute.RecreateInstancesInstanceGroupManagerRequest, +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_recreate_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.recreate_instances(request) + + +def test_recreate_instances_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_recreate_instances_request_resource=compute.InstanceGroupManagersRecreateInstancesRequest( + instances=["instances_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.recreate_instances(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/recreateInstances" + % client.transport._host, + args[1], + ) + + +def test_recreate_instances_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.recreate_instances( + compute.RecreateInstancesInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_recreate_instances_request_resource=compute.InstanceGroupManagersRecreateInstancesRequest( + instances=["instances_value"] + ), + ) + + +def test_recreate_instances_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RecreateInstancesInstanceGroupManagerRequest, + dict, + ], +) +def test_recreate_instances_unary_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_recreate_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.recreate_instances_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_recreate_instances_unary_rest_required_fields( + request_type=compute.RecreateInstancesInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.recreate_instances_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_recreate_instances_unary_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.recreate_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagersRecreateInstancesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_recreate_instances_unary_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_recreate_instances" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_recreate_instances" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RecreateInstancesInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.recreate_instances_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_recreate_instances_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.RecreateInstancesInstanceGroupManagerRequest, +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_managers_recreate_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.recreate_instances_unary(request) + + +def test_recreate_instances_unary_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_recreate_instances_request_resource=compute.InstanceGroupManagersRecreateInstancesRequest( + instances=["instances_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.recreate_instances_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/recreateInstances" + % client.transport._host, + args[1], + ) + + +def test_recreate_instances_unary_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.recreate_instances_unary( + compute.RecreateInstancesInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + instance_group_managers_recreate_instances_request_resource=compute.InstanceGroupManagersRecreateInstancesRequest( + instances=["instances_value"] + ), + ) + + +def test_recreate_instances_unary_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeInstanceGroupManagerRequest, + dict, + ], +) +def test_resize_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_resize_rest_required_fields( + request_type=compute.ResizeInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["size"] = 0 + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "size" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "size" in jsonified_request + assert jsonified_request["size"] == request_init["size"] + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["size"] = 443 + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "size", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "size" in jsonified_request + assert jsonified_request["size"] == 443 + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize(request) + + expected_params = [ + ( + "size", + 0, + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "size", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "size", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeInstanceGroupManagerRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize(request) + + +def test_resize_rest_flattened(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + size=443, + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize( + compute.ResizeInstanceGroupManagerRequest(), + project="project_value", + zone="zone_value", + instance_group_manager="instance_group_manager_value", + size=443, + ) + + +def test_resize_rest_error(): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeInstanceGroupManagerRequest, + dict, + ], +) +def test_resize_unary_rest(request_type): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_resize_unary_rest_required_fields( + request_type=compute.ResizeInstanceGroupManagerRequest, +): + transport_class = transports.InstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["size"] = 0 + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "size" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "size" in jsonified_request + assert jsonified_request["size"] == request_init["size"] + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["size"] = 443 + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "size", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "size" in jsonified_request + assert jsonified_request["size"] == 443 + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize_unary(request) + + expected_params = [ + ( + "size", + 0, + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_unary_rest_unset_required_fields(): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "size", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "size", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_unary_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupManagersRestInterceptor(), + ) + client = InstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.InstanceGroupManagersRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeInstanceGroupManagerRequest +): + client = InstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. with mock.patch.object(Session, "request") as req, pytest.raises( core_exceptions.BadRequest @@ -5665,10 +10605,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.resize_unary(request) -def test_patch_unary_rest_flattened(): +def test_resize_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5691,13 +10631,7 @@ def test_patch_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + size=443, ) mock_args.update(sample_request) @@ -5709,20 +10643,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.resize_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/resize" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_resize_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5731,22 +10665,16 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchInstanceGroupManagerRequest(), + client.resize_unary( + compute.ResizeInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + size=443, ) -def test_patch_unary_rest_error(): +def test_resize_unary_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5755,11 +10683,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, + compute.SetInstanceTemplateInstanceGroupManagerRequest, dict, ], ) -def test_patch_per_instance_configs_unary_rest(request_type): +def test_set_instance_template_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5771,15 +10699,8 @@ def test_patch_per_instance_configs_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_patch_per_instance_configs_req_resource"] = { - "per_instance_configs": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["instance_group_managers_set_instance_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -5817,10 +10738,10 @@ def test_patch_per_instance_configs_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_per_instance_configs_unary(request) + response = client.set_instance_template(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -5845,8 +10766,8 @@ def test_patch_per_instance_configs_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_per_instance_configs_unary_rest_required_fields( - request_type=compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, +def test_set_instance_template_rest_required_fields( + request_type=compute.SetInstanceTemplateInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -5865,7 +10786,7 @@ def test_patch_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -5876,7 +10797,7 @@ def test_patch_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -5919,25 +10840,25 @@ def test_patch_per_instance_configs_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_per_instance_configs_unary(request) + response = client.set_instance_template(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_per_instance_configs_unary_rest_unset_required_fields(): +def test_set_instance_template_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch_per_instance_configs._get_unset_required_fields({}) + unset_fields = transport.set_instance_template._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instanceGroupManager", - "instanceGroupManagersPatchPerInstanceConfigsReqResource", + "instanceGroupManagersSetInstanceTemplateRequestResource", "project", "zone", ) @@ -5946,7 +10867,7 @@ def test_patch_per_instance_configs_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): +def test_set_instance_template_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5959,11 +10880,9 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, - "post_patch_per_instance_configs", + transports.InstanceGroupManagersRestInterceptor, "post_set_instance_template" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, - "pre_patch_per_instance_configs", + transports.InstanceGroupManagersRestInterceptor, "pre_set_instance_template" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5980,7 +10899,7 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchPerInstanceConfigsInstanceGroupManagerRequest() + request = compute.SetInstanceTemplateInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -5988,7 +10907,7 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_per_instance_configs_unary( + client.set_instance_template( request, metadata=[ ("key", "val"), @@ -6000,9 +10919,9 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_per_instance_configs_unary_rest_bad_request( +def test_set_instance_template_rest_bad_request( transport: str = "rest", - request_type=compute.PatchPerInstanceConfigsInstanceGroupManagerRequest, + request_type=compute.SetInstanceTemplateInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6015,15 +10934,8 @@ def test_patch_per_instance_configs_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_patch_per_instance_configs_req_resource"] = { - "per_instance_configs": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["instance_group_managers_set_instance_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -6036,10 +10948,10 @@ def test_patch_per_instance_configs_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_per_instance_configs_unary(request) + client.set_instance_template(request) -def test_patch_per_instance_configs_unary_rest_flattened(): +def test_set_instance_template_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6062,10 +10974,8 @@ def test_patch_per_instance_configs_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_patch_per_instance_configs_req_resource=compute.InstanceGroupManagersPatchPerInstanceConfigsReq( - per_instance_configs=[ - compute.PerInstanceConfig(fingerprint="fingerprint_value") - ] + instance_group_managers_set_instance_template_request_resource=compute.InstanceGroupManagersSetInstanceTemplateRequest( + instance_template="instance_template_value" ), ) mock_args.update(sample_request) @@ -6078,20 +10988,20 @@ def test_patch_per_instance_configs_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_per_instance_configs_unary(**mock_args) + client.set_instance_template(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/patchPerInstanceConfigs" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/setInstanceTemplate" % client.transport._host, args[1], ) -def test_patch_per_instance_configs_unary_rest_flattened_error(transport: str = "rest"): +def test_set_instance_template_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6100,20 +11010,18 @@ def test_patch_per_instance_configs_unary_rest_flattened_error(transport: str = # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_per_instance_configs_unary( - compute.PatchPerInstanceConfigsInstanceGroupManagerRequest(), + client.set_instance_template( + compute.SetInstanceTemplateInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_patch_per_instance_configs_req_resource=compute.InstanceGroupManagersPatchPerInstanceConfigsReq( - per_instance_configs=[ - compute.PerInstanceConfig(fingerprint="fingerprint_value") - ] + instance_group_managers_set_instance_template_request_resource=compute.InstanceGroupManagersSetInstanceTemplateRequest( + instance_template="instance_template_value" ), ) -def test_patch_per_instance_configs_unary_rest_error(): +def test_set_instance_template_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6122,11 +11030,11 @@ def test_patch_per_instance_configs_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RecreateInstancesInstanceGroupManagerRequest, + compute.SetInstanceTemplateInstanceGroupManagerRequest, dict, ], ) -def test_recreate_instances_unary_rest(request_type): +def test_set_instance_template_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6138,8 +11046,8 @@ def test_recreate_instances_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_recreate_instances_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"] + request_init["instance_group_managers_set_instance_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -6177,36 +11085,14 @@ def test_recreate_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.recreate_instances_unary(request) + response = client.set_instance_template_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_recreate_instances_unary_rest_required_fields( - request_type=compute.RecreateInstancesInstanceGroupManagerRequest, +def test_set_instance_template_unary_rest_required_fields( + request_type=compute.SetInstanceTemplateInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -6225,7 +11111,7 @@ def test_recreate_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).recreate_instances._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -6236,7 +11122,7 @@ def test_recreate_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).recreate_instances._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -6279,25 +11165,25 @@ def test_recreate_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.recreate_instances_unary(request) + response = client.set_instance_template_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_recreate_instances_unary_rest_unset_required_fields(): +def test_set_instance_template_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.recreate_instances._get_unset_required_fields({}) + unset_fields = transport.set_instance_template._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instanceGroupManager", - "instanceGroupManagersRecreateInstancesRequestResource", + "instanceGroupManagersSetInstanceTemplateRequestResource", "project", "zone", ) @@ -6306,7 +11192,7 @@ def test_recreate_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_recreate_instances_unary_rest_interceptors(null_interceptor): +def test_set_instance_template_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -6319,9 +11205,9 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_recreate_instances" + transports.InstanceGroupManagersRestInterceptor, "post_set_instance_template" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_recreate_instances" + transports.InstanceGroupManagersRestInterceptor, "pre_set_instance_template" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6338,7 +11224,7 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RecreateInstancesInstanceGroupManagerRequest() + request = compute.SetInstanceTemplateInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -6346,7 +11232,7 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.recreate_instances_unary( + client.set_instance_template_unary( request, metadata=[ ("key", "val"), @@ -6358,9 +11244,9 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_recreate_instances_unary_rest_bad_request( +def test_set_instance_template_unary_rest_bad_request( transport: str = "rest", - request_type=compute.RecreateInstancesInstanceGroupManagerRequest, + request_type=compute.SetInstanceTemplateInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6373,8 +11259,8 @@ def test_recreate_instances_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_recreate_instances_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"] + request_init["instance_group_managers_set_instance_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -6387,10 +11273,10 @@ def test_recreate_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.recreate_instances_unary(request) + client.set_instance_template_unary(request) -def test_recreate_instances_unary_rest_flattened(): +def test_set_instance_template_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6413,8 +11299,8 @@ def test_recreate_instances_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_recreate_instances_request_resource=compute.InstanceGroupManagersRecreateInstancesRequest( - instances=["instances_value"] + instance_group_managers_set_instance_template_request_resource=compute.InstanceGroupManagersSetInstanceTemplateRequest( + instance_template="instance_template_value" ), ) mock_args.update(sample_request) @@ -6427,20 +11313,20 @@ def test_recreate_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.recreate_instances_unary(**mock_args) + client.set_instance_template_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/recreateInstances" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/setInstanceTemplate" % client.transport._host, args[1], ) -def test_recreate_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_set_instance_template_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6449,18 +11335,18 @@ def test_recreate_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.recreate_instances_unary( - compute.RecreateInstancesInstanceGroupManagerRequest(), + client.set_instance_template_unary( + compute.SetInstanceTemplateInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_recreate_instances_request_resource=compute.InstanceGroupManagersRecreateInstancesRequest( - instances=["instances_value"] + instance_group_managers_set_instance_template_request_resource=compute.InstanceGroupManagersSetInstanceTemplateRequest( + instance_template="instance_template_value" ), ) -def test_recreate_instances_unary_rest_error(): +def test_set_instance_template_unary_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6469,11 +11355,11 @@ def test_recreate_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ResizeInstanceGroupManagerRequest, + compute.SetTargetPoolsInstanceGroupManagerRequest, dict, ], ) -def test_resize_unary_rest(request_type): +def test_set_target_pools_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6485,6 +11371,10 @@ def test_resize_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -6521,10 +11411,10 @@ def test_resize_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.set_target_pools(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -6549,15 +11439,14 @@ def test_resize_unary_rest(request_type): assert response.zone == "zone_value" -def test_resize_unary_rest_required_fields( - request_type=compute.ResizeInstanceGroupManagerRequest, +def test_set_target_pools_rest_required_fields( + request_type=compute.SetTargetPoolsInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport request_init = {} request_init["instance_group_manager"] = "" request_init["project"] = "" - request_init["size"] = 0 request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -6567,32 +11456,23 @@ def test_resize_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "size" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "size" in jsonified_request - assert jsonified_request["size"] == request_init["size"] jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" - jsonified_request["size"] = 443 jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "size", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -6600,8 +11480,6 @@ def test_resize_unary_rest_required_fields( assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "size" in jsonified_request - assert jsonified_request["size"] == 443 assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -6626,44 +11504,35 @@ def test_resize_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.resize_unary(request) - - expected_params = [ - ( - "size", - 0, - ), - ] + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_target_pools(request) + + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_resize_unary_rest_unset_required_fields(): +def test_set_target_pools_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.resize._get_unset_required_fields({}) + unset_fields = transport.set_target_pools._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "size", - ) - ) + set(("requestId",)) & set( ( "instanceGroupManager", + "instanceGroupManagersSetTargetPoolsRequestResource", "project", - "size", "zone", ) ) @@ -6671,7 +11540,7 @@ def test_resize_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_resize_unary_rest_interceptors(null_interceptor): +def test_set_target_pools_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -6684,9 +11553,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_resize" + transports.InstanceGroupManagersRestInterceptor, "post_set_target_pools" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_resize" + transports.InstanceGroupManagersRestInterceptor, "pre_set_target_pools" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6703,7 +11572,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ResizeInstanceGroupManagerRequest() + request = compute.SetTargetPoolsInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -6711,7 +11580,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.resize_unary( + client.set_target_pools( request, metadata=[ ("key", "val"), @@ -6723,8 +11592,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_resize_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ResizeInstanceGroupManagerRequest +def test_set_target_pools_rest_bad_request( + transport: str = "rest", + request_type=compute.SetTargetPoolsInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6737,6 +11607,10 @@ def test_resize_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } + request_init["instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6748,10 +11622,10 @@ def test_resize_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.resize_unary(request) + client.set_target_pools(request) -def test_resize_unary_rest_flattened(): +def test_set_target_pools_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6774,7 +11648,9 @@ def test_resize_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - size=443, + instance_group_managers_set_target_pools_request_resource=compute.InstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" + ), ) mock_args.update(sample_request) @@ -6786,20 +11662,20 @@ def test_resize_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.resize_unary(**mock_args) + client.set_target_pools(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/resize" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/setTargetPools" % client.transport._host, args[1], ) -def test_resize_unary_rest_flattened_error(transport: str = "rest"): +def test_set_target_pools_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6808,16 +11684,18 @@ def test_resize_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.resize_unary( - compute.ResizeInstanceGroupManagerRequest(), + client.set_target_pools( + compute.SetTargetPoolsInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - size=443, + instance_group_managers_set_target_pools_request_resource=compute.InstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" + ), ) -def test_resize_unary_rest_error(): +def test_set_target_pools_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6826,11 +11704,11 @@ def test_resize_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetInstanceTemplateInstanceGroupManagerRequest, + compute.SetTargetPoolsInstanceGroupManagerRequest, dict, ], ) -def test_set_instance_template_unary_rest(request_type): +def test_set_target_pools_unary_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6842,8 +11720,9 @@ def test_set_instance_template_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_set_instance_template_request_resource"] = { - "instance_template": "instance_template_value" + request_init["instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], } request = request_type(request_init) @@ -6881,36 +11760,14 @@ def test_set_instance_template_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_instance_template_unary(request) + response = client.set_target_pools_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_instance_template_unary_rest_required_fields( - request_type=compute.SetInstanceTemplateInstanceGroupManagerRequest, +def test_set_target_pools_unary_rest_required_fields( + request_type=compute.SetTargetPoolsInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -6929,7 +11786,7 @@ def test_set_instance_template_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_instance_template._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -6940,7 +11797,7 @@ def test_set_instance_template_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_instance_template._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -6983,25 +11840,25 @@ def test_set_instance_template_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_instance_template_unary(request) + response = client.set_target_pools_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_instance_template_unary_rest_unset_required_fields(): +def test_set_target_pools_unary_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_instance_template._get_unset_required_fields({}) + unset_fields = transport.set_target_pools._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instanceGroupManager", - "instanceGroupManagersSetInstanceTemplateRequestResource", + "instanceGroupManagersSetTargetPoolsRequestResource", "project", "zone", ) @@ -7010,7 +11867,7 @@ def test_set_instance_template_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_instance_template_unary_rest_interceptors(null_interceptor): +def test_set_target_pools_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -7023,9 +11880,9 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_set_instance_template" + transports.InstanceGroupManagersRestInterceptor, "post_set_target_pools" ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_set_instance_template" + transports.InstanceGroupManagersRestInterceptor, "pre_set_target_pools" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -7042,7 +11899,7 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetInstanceTemplateInstanceGroupManagerRequest() + request = compute.SetTargetPoolsInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -7050,7 +11907,7 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_instance_template_unary( + client.set_target_pools_unary( request, metadata=[ ("key", "val"), @@ -7062,9 +11919,9 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_instance_template_unary_rest_bad_request( +def test_set_target_pools_unary_rest_bad_request( transport: str = "rest", - request_type=compute.SetInstanceTemplateInstanceGroupManagerRequest, + request_type=compute.SetTargetPoolsInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7077,8 +11934,9 @@ def test_set_instance_template_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_set_instance_template_request_resource"] = { - "instance_template": "instance_template_value" + request_init["instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], } request = request_type(request_init) @@ -7091,10 +11949,10 @@ def test_set_instance_template_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_instance_template_unary(request) + client.set_target_pools_unary(request) -def test_set_instance_template_unary_rest_flattened(): +def test_set_target_pools_unary_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7117,8 +11975,8 @@ def test_set_instance_template_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_set_instance_template_request_resource=compute.InstanceGroupManagersSetInstanceTemplateRequest( - instance_template="instance_template_value" + instance_group_managers_set_target_pools_request_resource=compute.InstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" ), ) mock_args.update(sample_request) @@ -7131,20 +11989,20 @@ def test_set_instance_template_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_instance_template_unary(**mock_args) + client.set_target_pools_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/setInstanceTemplate" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/setTargetPools" % client.transport._host, args[1], ) -def test_set_instance_template_unary_rest_flattened_error(transport: str = "rest"): +def test_set_target_pools_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7153,18 +12011,18 @@ def test_set_instance_template_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_instance_template_unary( - compute.SetInstanceTemplateInstanceGroupManagerRequest(), + client.set_target_pools_unary( + compute.SetTargetPoolsInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_set_instance_template_request_resource=compute.InstanceGroupManagersSetInstanceTemplateRequest( - instance_template="instance_template_value" + instance_group_managers_set_target_pools_request_resource=compute.InstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" ), ) -def test_set_instance_template_unary_rest_error(): +def test_set_target_pools_unary_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -7173,11 +12031,11 @@ def test_set_instance_template_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetTargetPoolsInstanceGroupManagerRequest, + compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest, dict, ], ) -def test_set_target_pools_unary_rest(request_type): +def test_update_per_instance_configs_rest(request_type): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7189,9 +12047,15 @@ def test_set_target_pools_unary_rest(request_type): "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_set_target_pools_request_resource"] = { - "fingerprint": "fingerprint_value", - "target_pools": ["target_pools_value_1", "target_pools_value_2"], + request_init["instance_group_managers_update_per_instance_configs_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -7229,10 +12093,10 @@ def test_set_target_pools_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_target_pools_unary(request) + response = client.update_per_instance_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -7257,8 +12121,8 @@ def test_set_target_pools_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_target_pools_unary_rest_required_fields( - request_type=compute.SetTargetPoolsInstanceGroupManagerRequest, +def test_update_per_instance_configs_rest_required_fields( + request_type=compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest, ): transport_class = transports.InstanceGroupManagersRestTransport @@ -7277,7 +12141,7 @@ def test_set_target_pools_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_target_pools._get_unset_required_fields(jsonified_request) + ).update_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -7288,7 +12152,7 @@ def test_set_target_pools_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_target_pools._get_unset_required_fields(jsonified_request) + ).update_per_instance_configs._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -7331,25 +12195,25 @@ def test_set_target_pools_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_target_pools_unary(request) + response = client.update_per_instance_configs(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_target_pools_unary_rest_unset_required_fields(): +def test_update_per_instance_configs_rest_unset_required_fields(): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_target_pools._get_unset_required_fields({}) + unset_fields = transport.update_per_instance_configs._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instanceGroupManager", - "instanceGroupManagersSetTargetPoolsRequestResource", + "instanceGroupManagersUpdatePerInstanceConfigsReqResource", "project", "zone", ) @@ -7358,7 +12222,7 @@ def test_set_target_pools_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_target_pools_unary_rest_interceptors(null_interceptor): +def test_update_per_instance_configs_rest_interceptors(null_interceptor): transport = transports.InstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -7371,9 +12235,11 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "post_set_target_pools" + transports.InstanceGroupManagersRestInterceptor, + "post_update_per_instance_configs", ) as post, mock.patch.object( - transports.InstanceGroupManagersRestInterceptor, "pre_set_target_pools" + transports.InstanceGroupManagersRestInterceptor, + "pre_update_per_instance_configs", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -7390,7 +12256,7 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetTargetPoolsInstanceGroupManagerRequest() + request = compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -7398,7 +12264,7 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_target_pools_unary( + client.update_per_instance_configs( request, metadata=[ ("key", "val"), @@ -7410,9 +12276,9 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_target_pools_unary_rest_bad_request( +def test_update_per_instance_configs_rest_bad_request( transport: str = "rest", - request_type=compute.SetTargetPoolsInstanceGroupManagerRequest, + request_type=compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest, ): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7425,9 +12291,15 @@ def test_set_target_pools_unary_rest_bad_request( "zone": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_managers_set_target_pools_request_resource"] = { - "fingerprint": "fingerprint_value", - "target_pools": ["target_pools_value_1", "target_pools_value_2"], + request_init["instance_group_managers_update_per_instance_configs_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -7440,10 +12312,10 @@ def test_set_target_pools_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_target_pools_unary(request) + client.update_per_instance_configs(request) -def test_set_target_pools_unary_rest_flattened(): +def test_update_per_instance_configs_rest_flattened(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7466,8 +12338,10 @@ def test_set_target_pools_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_set_target_pools_request_resource=compute.InstanceGroupManagersSetTargetPoolsRequest( - fingerprint="fingerprint_value" + instance_group_managers_update_per_instance_configs_req_resource=compute.InstanceGroupManagersUpdatePerInstanceConfigsReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] ), ) mock_args.update(sample_request) @@ -7480,20 +12354,20 @@ def test_set_target_pools_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_target_pools_unary(**mock_args) + client.update_per_instance_configs(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/setTargetPools" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroupManagers/{instance_group_manager}/updatePerInstanceConfigs" % client.transport._host, args[1], ) -def test_set_target_pools_unary_rest_flattened_error(transport: str = "rest"): +def test_update_per_instance_configs_rest_flattened_error(transport: str = "rest"): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7502,18 +12376,20 @@ def test_set_target_pools_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_target_pools_unary( - compute.SetTargetPoolsInstanceGroupManagerRequest(), + client.update_per_instance_configs( + compute.UpdatePerInstanceConfigsInstanceGroupManagerRequest(), project="project_value", zone="zone_value", instance_group_manager="instance_group_manager_value", - instance_group_managers_set_target_pools_request_resource=compute.InstanceGroupManagersSetTargetPoolsRequest( - fingerprint="fingerprint_value" + instance_group_managers_update_per_instance_configs_req_resource=compute.InstanceGroupManagersUpdatePerInstanceConfigsReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] ), ) -def test_set_target_pools_unary_rest_error(): +def test_update_per_instance_configs_rest_error(): client = InstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -7588,28 +12464,6 @@ def test_update_per_instance_configs_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_per_instance_configs_unary_rest_required_fields( @@ -7963,6 +12817,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InstanceGroupManagersClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_instance_group_managers_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -8013,6 +12880,14 @@ def test_instance_group_managers_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_instance_group_managers_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_instance_groups.py b/tests/unit/gapic/compute_v1/test_instance_groups.py index 976100e3f..3b2ea5adb 100644 --- a/tests/unit/gapic/compute_v1/test_instance_groups.py +++ b/tests/unit/gapic/compute_v1/test_instance_groups.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -525,7 +527,7 @@ def test_instance_groups_client_client_options_credentials_file( dict, ], ) -def test_add_instances_unary_rest(request_type): +def test_add_instances_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -576,10 +578,10 @@ def test_add_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_instances_unary(request) + response = client.add_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -604,7 +606,7 @@ def test_add_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_instances_unary_rest_required_fields( +def test_add_instances_rest_required_fields( request_type=compute.AddInstancesInstanceGroupRequest, ): transport_class = transports.InstanceGroupsRestTransport @@ -678,14 +680,14 @@ def test_add_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_instances_unary(request) + response = client.add_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_instances_unary_rest_unset_required_fields(): +def test_add_instances_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -705,7 +707,7 @@ def test_add_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_instances_unary_rest_interceptors(null_interceptor): +def test_add_instances_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -745,7 +747,7 @@ def test_add_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_instances_unary( + client.add_instances( request, metadata=[ ("key", "val"), @@ -757,7 +759,7 @@ def test_add_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_instances_unary_rest_bad_request( +def test_add_instances_rest_bad_request( transport: str = "rest", request_type=compute.AddInstancesInstanceGroupRequest ): client = InstanceGroupsClient( @@ -785,10 +787,10 @@ def test_add_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_instances_unary(request) + client.add_instances(request) -def test_add_instances_unary_rest_flattened(): +def test_add_instances_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -825,7 +827,7 @@ def test_add_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_instances_unary(**mock_args) + client.add_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -838,7 +840,7 @@ def test_add_instances_unary_rest_flattened(): ) -def test_add_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_add_instances_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -847,7 +849,7 @@ def test_add_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_instances_unary( + client.add_instances( compute.AddInstancesInstanceGroupRequest(), project="project_value", zone="zone_value", @@ -858,7 +860,7 @@ def test_add_instances_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_instances_unary_rest_error(): +def test_add_instances_rest_error(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -867,55 +869,76 @@ def test_add_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListInstanceGroupsRequest, + compute.AddInstancesInstanceGroupRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_instances_unary_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request_init["instance_groups_add_instances_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_instances_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert isinstance(response, compute.Operation) -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListInstanceGroupsRequest, +def test_add_instances_unary_rest_required_fields( + request_type=compute.AddInstancesInstanceGroupRequest, ): transport_class = transports.InstanceGroupsRestTransport request_init = {} + request_init["instance_group"] = "" request_init["project"] = "" + request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -927,32 +950,29 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroup"] = "instance_group_value" jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroup" in jsonified_request + assert jsonified_request["instanceGroup"] == "instance_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -961,7 +981,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -972,49 +992,46 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_instances_unary_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "instanceGroup", + "instanceGroupsAddInstancesRequestResource", + "project", + "zone", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_instances_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1027,9 +1044,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_aggregated_list" + transports.InstanceGroupsRestInterceptor, "post_add_instances" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_aggregated_list" + transports.InstanceGroupsRestInterceptor, "pre_add_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1044,19 +1061,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupAggregatedList.to_json( - compute.InstanceGroupAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListInstanceGroupsRequest() + request = compute.AddInstancesInstanceGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_instances_unary( request, metadata=[ ("key", "val"), @@ -1068,8 +1083,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListInstanceGroupsRequest +def test_add_instances_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddInstancesInstanceGroupRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1077,7 +1092,14 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request_init["instance_groups_add_instances_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1089,10 +1111,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_instances_unary(request) -def test_aggregated_list_rest_flattened(): +def test_add_instances_unary_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1101,39 +1123,48 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", + zone="zone_value", + instance_group="instance_group_value", + instance_groups_add_instances_request_resource=compute.InstanceGroupsAddInstancesRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/instanceGroups" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/addInstances" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_instances_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1142,179 +1173,75 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListInstanceGroupsRequest(), + client.add_instances_unary( + compute.AddInstancesInstanceGroupRequest(), project="project_value", + zone="zone_value", + instance_group="instance_group_value", + instance_groups_add_instances_request_resource=compute.InstanceGroupsAddInstancesRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_instances_unary_rest_error(): client = InstanceGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupAggregatedList( - items={ - "a": compute.InstanceGroupsScopedList(), - "b": compute.InstanceGroupsScopedList(), - "c": compute.InstanceGroupsScopedList(), - }, - next_page_token="abc", - ), - compute.InstanceGroupAggregatedList( - items={}, - next_page_token="def", - ), - compute.InstanceGroupAggregatedList( - items={ - "g": compute.InstanceGroupsScopedList(), - }, - next_page_token="ghi", - ), - compute.InstanceGroupAggregatedList( - items={ - "h": compute.InstanceGroupsScopedList(), - "i": compute.InstanceGroupsScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.InstanceGroupAggregatedList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.InstanceGroupsScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == ( - str, - compute.InstanceGroupsScopedList, - ) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.InstanceGroupsScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.DeleteInstanceGroupRequest, + compute.AggregatedListInstanceGroupsRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_aggregated_list_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "instance_group": "sample3", - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.InstanceGroupAggregatedList( + id="id_value", kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteInstanceGroupRequest, +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListInstanceGroupsRequest, ): transport_class = transports.InstanceGroupsRestTransport request_init = {} - request_init["instance_group"] = "" request_init["project"] = "" - request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1326,29 +1253,32 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["instanceGroup"] = "instance_group_value" jsonified_request["project"] = "project_value" - jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "instanceGroup" in jsonified_request - assert jsonified_request["instanceGroup"] == "instance_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "zone" in jsonified_request - assert jsonified_request["zone"] == "zone_value" client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1357,7 +1287,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceGroupAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1368,44 +1298,49 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupAggregatedList.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "instanceGroup", - "project", - "zone", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1418,9 +1353,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_delete" + transports.InstanceGroupsRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_delete" + transports.InstanceGroupsRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1435,17 +1370,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InstanceGroupAggregatedList.to_json( + compute.InstanceGroupAggregatedList() + ) - request = compute.DeleteInstanceGroupRequest() + request = compute.AggregatedListInstanceGroupsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InstanceGroupAggregatedList - client.delete_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -1457,8 +1394,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteInstanceGroupRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListInstanceGroupsRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1466,11 +1403,7 @@ def test_delete_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "instance_group": "sample3", - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1482,10 +1415,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.aggregated_list(request) -def test_delete_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1494,45 +1427,39 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceGroupAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance_group": "sample3", - } + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - zone="zone_value", - instance_group="instance_group_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}" + "%s/compute/v1/projects/{project}/aggregated/instanceGroups" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1541,28 +1468,95 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteInstanceGroupRequest(), + client.aggregated_list( + compute.AggregatedListInstanceGroupsRequest(), project="project_value", - zone="zone_value", - instance_group="instance_group_value", ) -def test_delete_unary_rest_error(): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = InstanceGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupAggregatedList( + items={ + "a": compute.InstanceGroupsScopedList(), + "b": compute.InstanceGroupsScopedList(), + "c": compute.InstanceGroupsScopedList(), + }, + next_page_token="abc", + ), + compute.InstanceGroupAggregatedList( + items={}, + next_page_token="def", + ), + compute.InstanceGroupAggregatedList( + items={ + "g": compute.InstanceGroupsScopedList(), + }, + next_page_token="ghi", + ), + compute.InstanceGroupAggregatedList( + items={ + "h": compute.InstanceGroupsScopedList(), + "i": compute.InstanceGroupsScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InstanceGroupAggregatedList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.InstanceGroupsScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == ( + str, + compute.InstanceGroupsScopedList, + ) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.InstanceGroupsScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.GetInstanceGroupRequest, + compute.DeleteInstanceGroupRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1579,46 +1573,66 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroup( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - size=443, - subnetwork="subnetwork_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InstanceGroup) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.size == 443 - assert response.subnetwork == "subnetwork_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetInstanceGroupRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteInstanceGroupRequest): transport_class = transports.InstanceGroupsRestTransport request_init = {} @@ -1636,7 +1650,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1647,7 +1661,9 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1665,7 +1681,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroup() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1676,32 +1692,32 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceGroupRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceGroup", @@ -1713,7 +1729,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1726,9 +1742,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_get" + transports.InstanceGroupsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_get" + transports.InstanceGroupsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1743,19 +1759,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroup.to_json( - compute.InstanceGroup() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetInstanceGroupRequest() + request = compute.DeleteInstanceGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroup + post.return_value = compute.Operation - client.get( + client.delete( request, metadata=[ ("key", "val"), @@ -1767,8 +1781,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetInstanceGroupRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceGroupRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1792,10 +1806,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete(request) -def test_get_rest_flattened(): +def test_delete_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1804,7 +1818,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroup() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1824,12 +1838,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1842,7 +1856,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1851,15 +1865,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetInstanceGroupRequest(), + client.delete( + compute.DeleteInstanceGroupRequest(), project="project_value", zone="zone_value", instance_group="instance_group_value", ) -def test_get_rest_error(): +def test_delete_rest_error(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1868,32 +1882,21 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertInstanceGroupRequest, + compute.DeleteInstanceGroupRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["instance_group_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "network": "network_value", - "region": "region_value", - "self_link": "self_link_value", - "size": 443, - "subnetwork": "subnetwork_value", - "zone": "zone_value", + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", } request = request_type(request_init) @@ -1931,40 +1934,19 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertInstanceGroupRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteInstanceGroupRequest, ): transport_class = transports.InstanceGroupsRestTransport request_init = {} + request_init["instance_group"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -1978,22 +1960,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroup"] = "instance_group_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroup" in jsonified_request + assert jsonified_request["instanceGroup"] == "instance_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -2017,10 +2002,9 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2029,24 +2013,24 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "instanceGroupResource", + "instanceGroup", "project", "zone", ) @@ -2055,7 +2039,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2068,9 +2052,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_insert" + transports.InstanceGroupsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_insert" + transports.InstanceGroupsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2087,7 +2071,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertInstanceGroupRequest() + request = compute.DeleteInstanceGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2095,7 +2079,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2107,8 +2091,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertInstanceGroupRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceGroupRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2116,21 +2100,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["instance_group_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "network": "network_value", - "region": "region_value", - "self_link": "self_link_value", - "size": 443, - "subnetwork": "subnetwork_value", - "zone": "zone_value", + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", } request = request_type(request_init) @@ -2143,10 +2116,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2158,15 +2131,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - instance_group_resource=compute.InstanceGroup( - creation_timestamp="creation_timestamp_value" - ), + instance_group="instance_group_value", ) mock_args.update(sample_request) @@ -2178,20 +2153,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2200,17 +2175,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertInstanceGroupRequest(), + client.delete_unary( + compute.DeleteInstanceGroupRequest(), project="project_value", zone="zone_value", - instance_group_resource=compute.InstanceGroup( - creation_timestamp="creation_timestamp_value" - ), + instance_group="instance_group_value", ) -def test_insert_unary_rest_error(): +def test_delete_unary_rest_error(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2219,50 +2192,1828 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListInstanceGroupsRequest, + compute.GetInstanceGroupRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rest(request_type): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroup( + creation_timestamp="creation_timestamp_value", + description="description_value", + fingerprint="fingerprint_value", + id=205, + kind="kind_value", + name="name_value", + network="network_value", + region="region_value", + self_link="self_link_value", + size=443, + subnetwork="subnetwork_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.InstanceGroup) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.fingerprint == "fingerprint_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.size == 443 + assert response.subnetwork == "subnetwork_value" + assert response.zone == "zone_value" + + +def test_get_rest_required_fields(request_type=compute.GetInstanceGroupRequest): + transport_class = transports.InstanceGroupsRestTransport + + request_init = {} + request_init["instance_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroup"] = "instance_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroup" in jsonified_request + assert jsonified_request["instanceGroup"] == "instance_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroup() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "instanceGroup", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupsRestInterceptor(), + ) + client = InstanceGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceGroup.to_json( + compute.InstanceGroup() + ) + + request = compute.GetInstanceGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroup + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetInstanceGroupRequest +): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroup() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group="instance_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroup.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetInstanceGroupRequest(), + project="project_value", + zone="zone_value", + instance_group="instance_group_value", + ) + + +def test_get_rest_error(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceGroupRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertInstanceGroupRequest): + transport_class = transports.InstanceGroupsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupsRestInterceptor(), + ) + client = InstanceGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInstanceGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceGroupRequest +): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_resource=compute.InstanceGroup( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertInstanceGroupRequest(), + project="project_value", + zone="zone_value", + instance_group_resource=compute.InstanceGroup( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceGroupRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertInstanceGroupRequest, +): + transport_class = transports.InstanceGroupsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupsRestInterceptor(), + ) + client = InstanceGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInstanceGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceGroupRequest +): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_group_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group_resource=compute.InstanceGroup( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertInstanceGroupRequest(), + project="project_value", + zone="zone_value", + instance_group_resource=compute.InstanceGroup( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListInstanceGroupsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListInstanceGroupsRequest): + transport_class = transports.InstanceGroupsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupsRestInterceptor(), + ) + client = InstanceGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceGroupList.to_json( + compute.InstanceGroupList() + ) + + request = compute.ListInstanceGroupsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroupList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListInstanceGroupsRequest +): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListInstanceGroupsRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupList( + items=[ + compute.InstanceGroup(), + compute.InstanceGroup(), + compute.InstanceGroup(), + ], + next_page_token="abc", + ), + compute.InstanceGroupList( + items=[], + next_page_token="def", + ), + compute.InstanceGroupList( + items=[ + compute.InstanceGroup(), + ], + next_page_token="ghi", + ), + compute.InstanceGroupList( + items=[ + compute.InstanceGroup(), + compute.InstanceGroup(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.InstanceGroupList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InstanceGroup) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListInstancesInstanceGroupsRequest, + dict, + ], +) +def test_list_instances_rest(request_type): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request_init["instance_groups_list_instances_request_resource"] = { + "instance_state": "instance_state_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupsListInstances( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupsListInstances.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_instances(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListInstancesPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_instances_rest_required_fields( + request_type=compute.ListInstancesInstanceGroupsRequest, +): + transport_class = transports.InstanceGroupsRestTransport + + request_init = {} + request_init["instance_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroup"] = "instance_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroup" in jsonified_request + assert jsonified_request["instanceGroup"] == "instance_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupsListInstances() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupsListInstances.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_instances(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_instances_rest_unset_required_fields(): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroup", + "instanceGroupsListInstancesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_instances_rest_interceptors(null_interceptor): + transport = transports.InstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceGroupsRestInterceptor(), + ) + client = InstanceGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "post_list_instances" + ) as post, mock.patch.object( + transports.InstanceGroupsRestInterceptor, "pre_list_instances" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceGroupsListInstances.to_json( + compute.InstanceGroupsListInstances() + ) + + request = compute.ListInstancesInstanceGroupsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceGroupsListInstances + + client.list_instances( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_instances_rest_bad_request( + transport: str = "rest", request_type=compute.ListInstancesInstanceGroupsRequest +): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request_init["instance_groups_list_instances_request_resource"] = { + "instance_state": "instance_state_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_instances(request) + + +def test_list_instances_rest_flattened(): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupsListInstances() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_group="instance_group_value", + instance_groups_list_instances_request_resource=compute.InstanceGroupsListInstancesRequest( + instance_state="instance_state_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupsListInstances.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_instances(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/listInstances" + % client.transport._host, + args[1], + ) + + +def test_list_instances_rest_flattened_error(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_instances( + compute.ListInstancesInstanceGroupsRequest(), + project="project_value", + zone="zone_value", + instance_group="instance_group_value", + instance_groups_list_instances_request_resource=compute.InstanceGroupsListInstancesRequest( + instance_state="instance_state_value" + ), + ) + + +def test_list_instances_rest_pager(transport: str = "rest"): + client = InstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceGroupsListInstances( + items=[ + compute.InstanceWithNamedPorts(), + compute.InstanceWithNamedPorts(), + compute.InstanceWithNamedPorts(), + ], + next_page_token="abc", + ), + compute.InstanceGroupsListInstances( + items=[], + next_page_token="def", + ), + compute.InstanceGroupsListInstances( + items=[ + compute.InstanceWithNamedPorts(), + ], + next_page_token="ghi", + ), + compute.InstanceGroupsListInstances( + items=[ + compute.InstanceWithNamedPorts(), + compute.InstanceWithNamedPorts(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InstanceGroupsListInstances.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + sample_request[ + "instance_groups_list_instances_request_resource" + ] = compute.InstanceGroupsListInstancesRequest( + instance_state="instance_state_value" + ) + + pager = client.list_instances(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InstanceWithNamedPorts) for i in results) + + pages = list(client.list_instances(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveInstancesInstanceGroupRequest, + dict, + ], +) +def test_remove_instances_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request_init["instance_groups_remove_instances_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.remove_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListInstanceGroupsRequest): +def test_remove_instances_rest_required_fields( + request_type=compute.RemoveInstancesInstanceGroupRequest, +): transport_class = transports.InstanceGroupsRestTransport request_init = {} + request_init["instance_group"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -2276,30 +4027,25 @@ def test_list_rest_required_fields(request_type=compute.ListInstanceGroupsReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).remove_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroup"] = "instance_group_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).remove_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroup" in jsonified_request + assert jsonified_request["instanceGroup"] == "instance_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -2312,7 +4058,7 @@ def test_list_rest_required_fields(request_type=compute.ListInstanceGroupsReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2323,42 +4069,37 @@ def test_list_rest_required_fields(request_type=compute.ListInstanceGroupsReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.remove_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_remove_instances_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.remove_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "instanceGroup", + "instanceGroupsRemoveInstancesRequestResource", "project", "zone", ) @@ -2367,7 +4108,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_remove_instances_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2380,9 +4121,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_list" + transports.InstanceGroupsRestInterceptor, "post_remove_instances" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_list" + transports.InstanceGroupsRestInterceptor, "pre_remove_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2397,19 +4138,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupList.to_json( - compute.InstanceGroupList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListInstanceGroupsRequest() + request = compute.RemoveInstancesInstanceGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupList + post.return_value = compute.Operation - client.list( + client.remove_instances( request, metadata=[ ("key", "val"), @@ -2421,8 +4160,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListInstanceGroupsRequest +def test_remove_instances_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveInstancesInstanceGroupRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2430,7 +4169,14 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } + request_init["instance_groups_remove_instances_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2442,10 +4188,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.remove_instances(request) -def test_list_rest_flattened(): +def test_remove_instances_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2454,40 +4200,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance_group": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", + instance_group="instance_group_value", + instance_groups_remove_instances_request_resource=compute.InstanceGroupsRemoveInstancesRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.remove_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/removeInstances" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_remove_instances_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2496,82 +4250,31 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListInstanceGroupsRequest(), + client.remove_instances( + compute.RemoveInstancesInstanceGroupRequest(), project="project_value", zone="zone_value", + instance_group="instance_group_value", + instance_groups_remove_instances_request_resource=compute.InstanceGroupsRemoveInstancesRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_remove_instances_rest_error(): client = InstanceGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupList( - items=[ - compute.InstanceGroup(), - compute.InstanceGroup(), - compute.InstanceGroup(), - ], - next_page_token="abc", - ), - compute.InstanceGroupList( - items=[], - next_page_token="def", - ), - compute.InstanceGroupList( - items=[ - compute.InstanceGroup(), - ], - next_page_token="ghi", - ), - compute.InstanceGroupList( - items=[ - compute.InstanceGroup(), - compute.InstanceGroup(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.InstanceGroupList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InstanceGroup) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListInstancesInstanceGroupsRequest, + compute.RemoveInstancesInstanceGroupRequest, dict, ], ) -def test_list_instances_rest(request_type): +def test_remove_instances_unary_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2583,39 +4286,53 @@ def test_list_instances_rest(request_type): "zone": "sample2", "instance_group": "sample3", } - request_init["instance_groups_list_instances_request_resource"] = { - "instance_state": "instance_state_value" + request_init["instance_groups_remove_instances_request_resource"] = { + "instances": [{"instance": "instance_value"}] } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupsListInstances( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupsListInstances.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_instances(request) + response = client.remove_instances_unary(request) - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListInstancesPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) -def test_list_instances_rest_required_fields( - request_type=compute.ListInstancesInstanceGroupsRequest, +def test_remove_instances_unary_rest_required_fields( + request_type=compute.RemoveInstancesInstanceGroupRequest, ): transport_class = transports.InstanceGroupsRestTransport @@ -2634,7 +4351,7 @@ def test_list_instances_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_instances._get_unset_required_fields(jsonified_request) + ).remove_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2645,17 +4362,9 @@ def test_list_instances_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_instances._get_unset_required_fields(jsonified_request) + ).remove_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2673,7 +4382,7 @@ def test_list_instances_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupsListInstances() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2692,39 +4401,29 @@ def test_list_instances_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupsListInstances.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_instances(request) + response = client.remove_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_instances_rest_unset_required_fields(): +def test_remove_instances_unary_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_instances._get_unset_required_fields({}) + unset_fields = transport.remove_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "instanceGroup", - "instanceGroupsListInstancesRequestResource", + "instanceGroupsRemoveInstancesRequestResource", "project", "zone", ) @@ -2733,7 +4432,7 @@ def test_list_instances_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_instances_rest_interceptors(null_interceptor): +def test_remove_instances_unary_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2746,9 +4445,9 @@ def test_list_instances_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_list_instances" + transports.InstanceGroupsRestInterceptor, "post_remove_instances" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_list_instances" + transports.InstanceGroupsRestInterceptor, "pre_remove_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2763,19 +4462,17 @@ def test_list_instances_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupsListInstances.to_json( - compute.InstanceGroupsListInstances() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListInstancesInstanceGroupsRequest() + request = compute.RemoveInstancesInstanceGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupsListInstances + post.return_value = compute.Operation - client.list_instances( + client.remove_instances_unary( request, metadata=[ ("key", "val"), @@ -2787,8 +4484,8 @@ def test_list_instances_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_instances_rest_bad_request( - transport: str = "rest", request_type=compute.ListInstancesInstanceGroupsRequest +def test_remove_instances_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveInstancesInstanceGroupRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2801,8 +4498,8 @@ def test_list_instances_rest_bad_request( "zone": "sample2", "instance_group": "sample3", } - request_init["instance_groups_list_instances_request_resource"] = { - "instance_state": "instance_state_value" + request_init["instance_groups_remove_instances_request_resource"] = { + "instances": [{"instance": "instance_value"}] } request = request_type(request_init) @@ -2815,10 +4512,10 @@ def test_list_instances_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_instances(request) + client.remove_instances_unary(request) -def test_list_instances_rest_flattened(): +def test_remove_instances_unary_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2827,7 +4524,7 @@ def test_list_instances_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupsListInstances() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -2841,8 +4538,8 @@ def test_list_instances_rest_flattened(): project="project_value", zone="zone_value", instance_group="instance_group_value", - instance_groups_list_instances_request_resource=compute.InstanceGroupsListInstancesRequest( - instance_state="instance_state_value" + instance_groups_remove_instances_request_resource=compute.InstanceGroupsRemoveInstancesRequest( + instances=[compute.InstanceReference(instance="instance_value")] ), ) mock_args.update(sample_request) @@ -2850,25 +4547,25 @@ def test_list_instances_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupsListInstances.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_instances(**mock_args) + client.remove_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/listInstances" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/removeInstances" % client.transport._host, args[1], ) -def test_list_instances_rest_flattened_error(transport: str = "rest"): +def test_remove_instances_unary_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2877,97 +4574,31 @@ def test_list_instances_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_instances( - compute.ListInstancesInstanceGroupsRequest(), + client.remove_instances_unary( + compute.RemoveInstancesInstanceGroupRequest(), project="project_value", zone="zone_value", instance_group="instance_group_value", - instance_groups_list_instances_request_resource=compute.InstanceGroupsListInstancesRequest( - instance_state="instance_state_value" + instance_groups_remove_instances_request_resource=compute.InstanceGroupsRemoveInstancesRequest( + instances=[compute.InstanceReference(instance="instance_value")] ), ) -def test_list_instances_rest_pager(transport: str = "rest"): +def test_remove_instances_unary_rest_error(): client = InstanceGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceGroupsListInstances( - items=[ - compute.InstanceWithNamedPorts(), - compute.InstanceWithNamedPorts(), - compute.InstanceWithNamedPorts(), - ], - next_page_token="abc", - ), - compute.InstanceGroupsListInstances( - items=[], - next_page_token="def", - ), - compute.InstanceGroupsListInstances( - items=[ - compute.InstanceWithNamedPorts(), - ], - next_page_token="ghi", - ), - compute.InstanceGroupsListInstances( - items=[ - compute.InstanceWithNamedPorts(), - compute.InstanceWithNamedPorts(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.InstanceGroupsListInstances.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance_group": "sample3", - } - sample_request[ - "instance_groups_list_instances_request_resource" - ] = compute.InstanceGroupsListInstancesRequest( - instance_state="instance_state_value" - ) - - pager = client.list_instances(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InstanceWithNamedPorts) for i in results) - - pages = list(client.list_instances(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.RemoveInstancesInstanceGroupRequest, + compute.SetNamedPortsInstanceGroupRequest, dict, ], ) -def test_remove_instances_unary_rest(request_type): +def test_set_named_ports_rest(request_type): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2979,8 +4610,9 @@ def test_remove_instances_unary_rest(request_type): "zone": "sample2", "instance_group": "sample3", } - request_init["instance_groups_remove_instances_request_resource"] = { - "instances": [{"instance": "instance_value"}] + request_init["instance_groups_set_named_ports_request_resource"] = { + "fingerprint": "fingerprint_value", + "named_ports": [{"name": "name_value", "port": 453}], } request = request_type(request_init) @@ -3018,10 +4650,10 @@ def test_remove_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_instances_unary(request) + response = client.set_named_ports(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3046,8 +4678,8 @@ def test_remove_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_remove_instances_unary_rest_required_fields( - request_type=compute.RemoveInstancesInstanceGroupRequest, +def test_set_named_ports_rest_required_fields( + request_type=compute.SetNamedPortsInstanceGroupRequest, ): transport_class = transports.InstanceGroupsRestTransport @@ -3066,7 +4698,7 @@ def test_remove_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_instances._get_unset_required_fields(jsonified_request) + ).set_named_ports._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3077,7 +4709,7 @@ def test_remove_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_instances._get_unset_required_fields(jsonified_request) + ).set_named_ports._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3120,25 +4752,25 @@ def test_remove_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_instances_unary(request) + response = client.set_named_ports(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_instances_unary_rest_unset_required_fields(): +def test_set_named_ports_rest_unset_required_fields(): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_instances._get_unset_required_fields({}) + unset_fields = transport.set_named_ports._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instanceGroup", - "instanceGroupsRemoveInstancesRequestResource", + "instanceGroupsSetNamedPortsRequestResource", "project", "zone", ) @@ -3147,7 +4779,7 @@ def test_remove_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_instances_unary_rest_interceptors(null_interceptor): +def test_set_named_ports_rest_interceptors(null_interceptor): transport = transports.InstanceGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3160,9 +4792,9 @@ def test_remove_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "post_remove_instances" + transports.InstanceGroupsRestInterceptor, "post_set_named_ports" ) as post, mock.patch.object( - transports.InstanceGroupsRestInterceptor, "pre_remove_instances" + transports.InstanceGroupsRestInterceptor, "pre_set_named_ports" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3179,7 +4811,7 @@ def test_remove_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveInstancesInstanceGroupRequest() + request = compute.SetNamedPortsInstanceGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3187,7 +4819,7 @@ def test_remove_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_instances_unary( + client.set_named_ports( request, metadata=[ ("key", "val"), @@ -3199,8 +4831,8 @@ def test_remove_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_instances_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemoveInstancesInstanceGroupRequest +def test_set_named_ports_rest_bad_request( + transport: str = "rest", request_type=compute.SetNamedPortsInstanceGroupRequest ): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3213,8 +4845,9 @@ def test_remove_instances_unary_rest_bad_request( "zone": "sample2", "instance_group": "sample3", } - request_init["instance_groups_remove_instances_request_resource"] = { - "instances": [{"instance": "instance_value"}] + request_init["instance_groups_set_named_ports_request_resource"] = { + "fingerprint": "fingerprint_value", + "named_ports": [{"name": "name_value", "port": 453}], } request = request_type(request_init) @@ -3227,10 +4860,10 @@ def test_remove_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_instances_unary(request) + client.set_named_ports(request) -def test_remove_instances_unary_rest_flattened(): +def test_set_named_ports_rest_flattened(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3253,8 +4886,8 @@ def test_remove_instances_unary_rest_flattened(): project="project_value", zone="zone_value", instance_group="instance_group_value", - instance_groups_remove_instances_request_resource=compute.InstanceGroupsRemoveInstancesRequest( - instances=[compute.InstanceReference(instance="instance_value")] + instance_groups_set_named_ports_request_resource=compute.InstanceGroupsSetNamedPortsRequest( + fingerprint="fingerprint_value" ), ) mock_args.update(sample_request) @@ -3267,20 +4900,20 @@ def test_remove_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_instances_unary(**mock_args) + client.set_named_ports(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/removeInstances" + "%s/compute/v1/projects/{project}/zones/{zone}/instanceGroups/{instance_group}/setNamedPorts" % client.transport._host, args[1], ) -def test_remove_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_set_named_ports_rest_flattened_error(transport: str = "rest"): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3289,18 +4922,18 @@ def test_remove_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_instances_unary( - compute.RemoveInstancesInstanceGroupRequest(), + client.set_named_ports( + compute.SetNamedPortsInstanceGroupRequest(), project="project_value", zone="zone_value", instance_group="instance_group_value", - instance_groups_remove_instances_request_resource=compute.InstanceGroupsRemoveInstancesRequest( - instances=[compute.InstanceReference(instance="instance_value")] + instance_groups_set_named_ports_request_resource=compute.InstanceGroupsSetNamedPortsRequest( + fingerprint="fingerprint_value" ), ) -def test_remove_instances_unary_rest_error(): +def test_set_named_ports_rest_error(): client = InstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3369,28 +5002,6 @@ def test_set_named_ports_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_named_ports_unary_rest_required_fields( @@ -3729,6 +5340,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InstanceGroupsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_instance_groups_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3768,6 +5392,14 @@ def test_instance_groups_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_instance_groups_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_instance_templates.py b/tests/unit/gapic/compute_v1/test_instance_templates.py index afac338bb..41bd45b18 100644 --- a/tests/unit/gapic/compute_v1/test_instance_templates.py +++ b/tests/unit/gapic/compute_v1/test_instance_templates.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_instance_templates_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -589,10 +591,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -617,7 +619,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteInstanceTemplateRequest, ): transport_class = transports.InstanceTemplatesRestTransport @@ -686,14 +688,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.InstanceTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -711,7 +713,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.InstanceTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -751,7 +753,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -763,7 +765,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteInstanceTemplateRequest ): client = InstanceTemplatesClient( @@ -784,10 +786,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -816,7 +818,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -829,7 +831,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -838,14 +840,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteInstanceTemplateRequest(), project="project_value", instance_template="instance_template_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -854,11 +856,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetInstanceTemplateRequest, + compute.DeleteInstanceTemplateRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -871,36 +873,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceTemplate( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - source_instance="source_instance_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceTemplate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InstanceTemplate) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.self_link == "self_link_value" - assert response.source_instance == "source_instance_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetInstanceTemplateRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteInstanceTemplateRequest, +): transport_class = transports.InstanceTemplatesRestTransport request_init = {} @@ -917,7 +929,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceTemplateReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -927,7 +939,9 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceTemplateReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -943,7 +957,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceTemplateReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceTemplate() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -954,32 +968,32 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceTemplateReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceTemplate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.InstanceTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceTemplate", @@ -990,7 +1004,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.InstanceTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1003,9 +1017,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceTemplatesRestInterceptor, "post_get" + transports.InstanceTemplatesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstanceTemplatesRestInterceptor, "pre_get" + transports.InstanceTemplatesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1020,19 +1034,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceTemplate.to_json( - compute.InstanceTemplate() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetInstanceTemplateRequest() + request = compute.DeleteInstanceTemplateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceTemplate + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1044,8 +1056,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetInstanceTemplateRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceTemplateRequest ): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1065,10 +1077,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1077,7 +1089,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceTemplate() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "instance_template": "sample2"} @@ -1092,12 +1104,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceTemplate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1110,7 +1122,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1119,14 +1131,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetInstanceTemplateRequest(), + client.delete_unary( + compute.DeleteInstanceTemplateRequest(), project="project_value", instance_template="instance_template_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1135,52 +1147,58 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyInstanceTemplateRequest, + compute.GetInstanceTemplateRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "instance_template": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.InstanceTemplate( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + name="name_value", + self_link="self_link_value", + source_instance="source_instance_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.InstanceTemplate.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.InstanceTemplate) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.self_link == "self_link_value" + assert response.source_instance == "source_instance_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyInstanceTemplateRequest, -): +def test_get_rest_required_fields(request_type=compute.GetInstanceTemplateRequest): transport_class = transports.InstanceTemplatesRestTransport request_init = {} + request_init["instance_template"] = "" request_init["project"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1192,26 +1210,24 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceTemplate"] = "instance_template_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceTemplate" in jsonified_request + assert jsonified_request["instanceTemplate"] == "instance_template_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1220,7 +1236,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.InstanceTemplate() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1238,36 +1254,793 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.InstanceTemplate.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.InstanceTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "instanceTemplate", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.InstanceTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceTemplatesRestInterceptor(), + ) + client = InstanceTemplatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceTemplatesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.InstanceTemplatesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceTemplate.to_json( + compute.InstanceTemplate() + ) + + request = compute.GetInstanceTemplateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceTemplate + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetInstanceTemplateRequest +): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "instance_template": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceTemplate() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "instance_template": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + instance_template="instance_template_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceTemplate.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/instanceTemplates/{instance_template}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetInstanceTemplateRequest(), + project="project_value", + instance_template="instance_template_value", + ) + + +def test_get_rest_error(): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyInstanceTemplateRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyInstanceTemplateRequest, +): + transport_class = transports.InstanceTemplatesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.InstanceTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.InstanceTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InstanceTemplatesRestInterceptor(), + ) + client = InstanceTemplatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstanceTemplatesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.InstanceTemplatesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyInstanceTemplateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyInstanceTemplateRequest +): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "resource": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/instanceTemplates/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyInstanceTemplateRequest(), + project="project_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceTemplateRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["instance_template_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "self_link": "self_link_value", + "source_instance": "source_instance_value", + "source_instance_params": { + "disk_configs": [ + { + "auto_delete": True, + "custom_image": "custom_image_value", + "device_name": "device_name_value", + "instantiate_from": "instantiate_from_value", + } + ] + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertInstanceTemplateRequest, +): + transport_class = transports.InstanceTemplatesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = InstanceTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.InstanceTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "instanceTemplateResource", "project", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.InstanceTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1280,9 +2053,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstanceTemplatesRestInterceptor, "post_get_iam_policy" + transports.InstanceTemplatesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.InstanceTemplatesRestInterceptor, "pre_get_iam_policy" + transports.InstanceTemplatesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1297,17 +2070,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyInstanceTemplateRequest() + request = compute.InsertInstanceTemplateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.insert( request, metadata=[ ("key", "val"), @@ -1319,8 +2092,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyInstanceTemplateRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceTemplateRequest ): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1328,7 +2101,177 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1"} + request_init["instance_template_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "self_link": "self_link_value", + "source_instance": "source_instance_value", + "source_instance_params": { + "disk_configs": [ + { + "auto_delete": True, + "custom_image": "custom_image_value", + "device_name": "device_name_value", + "instantiate_from": "instantiate_from_value", + } + ] + }, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1340,10 +2283,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.insert(request) -def test_get_iam_policy_rest_flattened(): +def test_insert_rest_flattened(): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1352,40 +2295,42 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", + instance_template_resource=compute.InstanceTemplate( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/instanceTemplates/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/global/instanceTemplates" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1394,14 +2339,16 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyInstanceTemplateRequest(), + client.insert( + compute.InsertInstanceTemplateRequest(), project="project_value", - resource="resource_value", + instance_template_resource=compute.InstanceTemplate( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_iam_policy_rest_error(): +def test_insert_rest_error(): client = InstanceTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1632,28 +2579,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -3194,6 +4119,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InstanceTemplatesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_instance_templates_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3231,6 +4169,14 @@ def test_instance_templates_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_instance_templates_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_instances.py b/tests/unit/gapic/compute_v1/test_instances.py index f169868bd..c788e9cc0 100644 --- a/tests/unit/gapic/compute_v1/test_instances.py +++ b/tests/unit/gapic/compute_v1/test_instances.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -512,7 +514,7 @@ def test_instances_client_client_options_credentials_file( dict, ], ) -def test_add_access_config_unary_rest(request_type): +def test_add_access_config_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -567,10 +569,10 @@ def test_add_access_config_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_access_config_unary(request) + response = client.add_access_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -595,7 +597,7 @@ def test_add_access_config_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_access_config_unary_rest_required_fields( +def test_add_access_config_rest_required_fields( request_type=compute.AddAccessConfigInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -681,7 +683,7 @@ def test_add_access_config_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_access_config_unary(request) + response = client.add_access_config(request) expected_params = [ ( @@ -693,7 +695,7 @@ def test_add_access_config_unary_rest_required_fields( assert expected_params == actual_params -def test_add_access_config_unary_rest_unset_required_fields(): +def test_add_access_config_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -719,7 +721,7 @@ def test_add_access_config_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_access_config_unary_rest_interceptors(null_interceptor): +def test_add_access_config_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -757,7 +759,7 @@ def test_add_access_config_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_access_config_unary( + client.add_access_config( request, metadata=[ ("key", "val"), @@ -769,7 +771,7 @@ def test_add_access_config_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_access_config_unary_rest_bad_request( +def test_add_access_config_rest_bad_request( transport: str = "rest", request_type=compute.AddAccessConfigInstanceRequest ): client = InstancesClient( @@ -801,10 +803,10 @@ def test_add_access_config_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_access_config_unary(request) + client.add_access_config(request) -def test_add_access_config_unary_rest_flattened(): +def test_add_access_config_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -842,7 +844,7 @@ def test_add_access_config_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_access_config_unary(**mock_args) + client.add_access_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -855,7 +857,7 @@ def test_add_access_config_unary_rest_flattened(): ) -def test_add_access_config_unary_rest_flattened_error(transport: str = "rest"): +def test_add_access_config_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -864,7 +866,7 @@ def test_add_access_config_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_access_config_unary( + client.add_access_config( compute.AddAccessConfigInstanceRequest(), project="project_value", zone="zone_value", @@ -876,7 +878,7 @@ def test_add_access_config_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_access_config_unary_rest_error(): +def test_add_access_config_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -885,11 +887,11 @@ def test_add_access_config_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AddResourcePoliciesInstanceRequest, + compute.AddAccessConfigInstanceRequest, dict, ], ) -def test_add_resource_policies_unary_rest(request_type): +def test_add_access_config_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -897,8 +899,16 @@ def test_add_resource_policies_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_add_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + request_init["access_config_resource"] = { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", } request = request_type(request_init) @@ -936,41 +946,20 @@ def test_add_resource_policies_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_resource_policies_unary(request) + response = client.add_access_config_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_add_resource_policies_unary_rest_required_fields( - request_type=compute.AddResourcePoliciesInstanceRequest, +def test_add_access_config_unary_rest_required_fields( + request_type=compute.AddAccessConfigInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} request_init["instance"] = "" + request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -981,28 +970,39 @@ def test_add_resource_policies_unary_rest_required_fields( ) # verify fields with default values are dropped + assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_resource_policies._get_unset_required_fields(jsonified_request) + ).add_access_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_resource_policies._get_unset_required_fields(jsonified_request) + ).add_access_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "network_interface", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -1038,25 +1038,36 @@ def test_add_resource_policies_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_resource_policies_unary(request) + response = client.add_access_config_unary(request) - expected_params = [] + expected_params = [ + ( + "networkInterface", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_resource_policies_unary_rest_unset_required_fields(): +def test_add_access_config_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.add_resource_policies._get_unset_required_fields({}) + unset_fields = transport.add_access_config._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "networkInterface", + "requestId", + ) + ) & set( ( + "accessConfigResource", "instance", - "instancesAddResourcePoliciesRequestResource", + "networkInterface", "project", "zone", ) @@ -1065,7 +1076,7 @@ def test_add_resource_policies_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_resource_policies_unary_rest_interceptors(null_interceptor): +def test_add_access_config_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -1076,9 +1087,9 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_add_resource_policies" + transports.InstancesRestInterceptor, "post_add_access_config" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_add_resource_policies" + transports.InstancesRestInterceptor, "pre_add_access_config" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1095,7 +1106,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AddResourcePoliciesInstanceRequest() + request = compute.AddAccessConfigInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1103,7 +1114,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_resource_policies_unary( + client.add_access_config_unary( request, metadata=[ ("key", "val"), @@ -1115,8 +1126,8 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_resource_policies_unary_rest_bad_request( - transport: str = "rest", request_type=compute.AddResourcePoliciesInstanceRequest +def test_add_access_config_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddAccessConfigInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1125,8 +1136,16 @@ def test_add_resource_policies_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_add_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + request_init["access_config_resource"] = { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", } request = request_type(request_init) @@ -1139,10 +1158,10 @@ def test_add_resource_policies_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_resource_policies_unary(request) + client.add_access_config_unary(request) -def test_add_resource_policies_unary_rest_flattened(): +def test_add_access_config_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1165,8 +1184,9 @@ def test_add_resource_policies_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_add_resource_policies_request_resource=compute.InstancesAddResourcePoliciesRequest( - resource_policies=["resource_policies_value"] + network_interface="network_interface_value", + access_config_resource=compute.AccessConfig( + external_ipv6="external_ipv6_value" ), ) mock_args.update(sample_request) @@ -1179,20 +1199,20 @@ def test_add_resource_policies_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_resource_policies_unary(**mock_args) + client.add_access_config_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/addResourcePolicies" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/addAccessConfig" % client.transport._host, args[1], ) -def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest"): +def test_add_access_config_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1201,18 +1221,19 @@ def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_resource_policies_unary( - compute.AddResourcePoliciesInstanceRequest(), + client.add_access_config_unary( + compute.AddAccessConfigInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_add_resource_policies_request_resource=compute.InstancesAddResourcePoliciesRequest( - resource_policies=["resource_policies_value"] + network_interface="network_interface_value", + access_config_resource=compute.AccessConfig( + external_ipv6="external_ipv6_value" ), ) -def test_add_resource_policies_unary_rest_error(): +def test_add_access_config_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1221,55 +1242,94 @@ def test_add_resource_policies_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListInstancesRequest, + compute.AddResourcePoliciesInstanceRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_resource_policies_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_resource_policies(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListInstancesRequest, +def test_add_resource_policies_rest_required_fields( + request_type=compute.AddResourcePoliciesInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["instance"] = "" request_init["project"] = "" + request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1281,32 +1341,29 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1315,7 +1372,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1326,47 +1383,46 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_resource_policies(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_resource_policies_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_resource_policies._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "instance", + "instancesAddResourcePoliciesRequestResource", + "project", + "zone", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_resource_policies_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -1377,9 +1433,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_aggregated_list" + transports.InstancesRestInterceptor, "post_add_resource_policies" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_aggregated_list" + transports.InstancesRestInterceptor, "pre_add_resource_policies" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1394,19 +1450,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceAggregatedList.to_json( - compute.InstanceAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListInstancesRequest() + request = compute.AddResourcePoliciesInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_resource_policies( request, metadata=[ ("key", "val"), @@ -1418,8 +1472,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListInstancesRequest +def test_add_resource_policies_rest_bad_request( + transport: str = "rest", request_type=compute.AddResourcePoliciesInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1427,7 +1481,10 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1439,10 +1496,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_resource_policies(request) -def test_aggregated_list_rest_flattened(): +def test_add_resource_policies_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1451,39 +1508,48 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", + zone="zone_value", + instance="instance_value", + instances_add_resource_policies_request_resource=compute.InstancesAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_resource_policies(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/instances" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/addResourcePolicies" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_resource_policies_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1492,90 +1558,31 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListInstancesRequest(), + client.add_resource_policies( + compute.AddResourcePoliciesInstanceRequest(), project="project_value", + zone="zone_value", + instance="instance_value", + instances_add_resource_policies_request_resource=compute.InstancesAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_resource_policies_rest_error(): client = InstancesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceAggregatedList( - items={ - "a": compute.InstancesScopedList(), - "b": compute.InstancesScopedList(), - "c": compute.InstancesScopedList(), - }, - next_page_token="abc", - ), - compute.InstanceAggregatedList( - items={}, - next_page_token="def", - ), - compute.InstanceAggregatedList( - items={ - "g": compute.InstancesScopedList(), - }, - next_page_token="ghi", - ), - compute.InstanceAggregatedList( - items={ - "h": compute.InstancesScopedList(), - "i": compute.InstancesScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.InstanceAggregatedList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.InstancesScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == (str, compute.InstancesScopedList) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.InstancesScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.AttachDiskInstanceRequest, + compute.AddResourcePoliciesInstanceRequest, dict, ], ) -def test_attach_disk_unary_rest(request_type): +def test_add_resource_policies_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1583,50 +1590,8 @@ def test_attach_disk_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["attached_disk_resource"] = { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [{"content": "content_value", "file_type": "file_type_value"}], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", + request_init["instances_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] } request = request_type(request_init) @@ -1664,36 +1629,14 @@ def test_attach_disk_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.attach_disk_unary(request) + response = client.add_resource_policies_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_attach_disk_unary_rest_required_fields( - request_type=compute.AttachDiskInstanceRequest, +def test_add_resource_policies_unary_rest_required_fields( + request_type=compute.AddResourcePoliciesInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -1712,7 +1655,7 @@ def test_attach_disk_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).attach_disk._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1723,14 +1666,9 @@ def test_attach_disk_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).attach_disk._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "force_attach", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1771,30 +1709,25 @@ def test_attach_disk_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.attach_disk_unary(request) + response = client.add_resource_policies_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_attach_disk_unary_rest_unset_required_fields(): +def test_add_resource_policies_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.attach_disk._get_unset_required_fields({}) + unset_fields = transport.add_resource_policies._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "forceAttach", - "requestId", - ) - ) + set(("requestId",)) & set( ( - "attachedDiskResource", "instance", + "instancesAddResourcePoliciesRequestResource", "project", "zone", ) @@ -1803,7 +1736,7 @@ def test_attach_disk_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_attach_disk_unary_rest_interceptors(null_interceptor): +def test_add_resource_policies_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -1814,9 +1747,9 @@ def test_attach_disk_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_attach_disk" + transports.InstancesRestInterceptor, "post_add_resource_policies" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_attach_disk" + transports.InstancesRestInterceptor, "pre_add_resource_policies" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1833,7 +1766,7 @@ def test_attach_disk_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AttachDiskInstanceRequest() + request = compute.AddResourcePoliciesInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1841,7 +1774,7 @@ def test_attach_disk_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.attach_disk_unary( + client.add_resource_policies_unary( request, metadata=[ ("key", "val"), @@ -1853,8 +1786,8 @@ def test_attach_disk_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_attach_disk_unary_rest_bad_request( - transport: str = "rest", request_type=compute.AttachDiskInstanceRequest +def test_add_resource_policies_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddResourcePoliciesInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1863,50 +1796,8 @@ def test_attach_disk_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["attached_disk_resource"] = { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [{"content": "content_value", "file_type": "file_type_value"}], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", + request_init["instances_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] } request = request_type(request_init) @@ -1919,10 +1810,10 @@ def test_attach_disk_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.attach_disk_unary(request) + client.add_resource_policies_unary(request) -def test_attach_disk_unary_rest_flattened(): +def test_add_resource_policies_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1945,7 +1836,9 @@ def test_attach_disk_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - attached_disk_resource=compute.AttachedDisk(auto_delete=True), + instances_add_resource_policies_request_resource=compute.InstancesAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) mock_args.update(sample_request) @@ -1957,20 +1850,20 @@ def test_attach_disk_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.attach_disk_unary(**mock_args) + client.add_resource_policies_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/attachDisk" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/addResourcePolicies" % client.transport._host, args[1], ) -def test_attach_disk_unary_rest_flattened_error(transport: str = "rest"): +def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1979,16 +1872,18 @@ def test_attach_disk_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.attach_disk_unary( - compute.AttachDiskInstanceRequest(), + client.add_resource_policies_unary( + compute.AddResourcePoliciesInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - attached_disk_resource=compute.AttachedDisk(auto_delete=True), + instances_add_resource_policies_request_resource=compute.InstancesAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) -def test_attach_disk_unary_rest_error(): +def test_add_resource_policies_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1997,249 +1892,55 @@ def test_attach_disk_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.BulkInsertInstanceRequest, + compute.AggregatedListInstancesRequest, dict, ], ) -def test_bulk_insert_unary_rest(request_type): +def test_aggregated_list_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["bulk_insert_instance_resource_resource"] = { - "count": 553, - "instance_properties": { - "advanced_machine_features": { - "enable_nested_virtualization": True, - "enable_uefi_networking": True, - "threads_per_core": 1689, - }, - "can_ip_forward": True, - "confidential_instance_config": {"enable_confidential_compute": True}, - "description": "description_value", - "disks": [ - { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [ - {"content": "content_value", "file_type": "file_type_value"} - ], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", - } - ], - "guest_accelerators": [ - { - "accelerator_count": 1805, - "accelerator_type": "accelerator_type_value", - } - ], - "labels": {}, - "machine_type": "machine_type_value", - "metadata": { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", - }, - "min_cpu_platform": "min_cpu_platform_value", - "network_interfaces": [ - { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", - } - ], - "network_performance_config": { - "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" - }, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "reservation_affinity": { - "consume_reservation_type": "consume_reservation_type_value", - "key": "key_value", - "values": ["values_value_1", "values_value_2"], - }, - "resource_manager_tags": {}, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "scheduling": { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - }, - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} - ], - "shielded_instance_config": { - "enable_integrity_monitoring": True, - "enable_secure_boot": True, - "enable_vtpm": True, - }, - "tags": { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - }, - }, - "location_policy": {"locations": {}}, - "min_count": 972, - "name_pattern": "name_pattern_value", - "per_instance_properties": {}, - "source_instance_template": "source_instance_template_value", - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.InstanceAggregatedList( + id="id_value", kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.bulk_insert_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_bulk_insert_unary_rest_required_fields( - request_type=compute.BulkInsertInstanceRequest, +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListInstancesRequest, ): transport_class = transports.InstancesRestTransport request_init = {} request_init["project"] = "" - request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2251,26 +1952,32 @@ def test_bulk_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).bulk_insert._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).bulk_insert._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "zone" in jsonified_request - assert jsonified_request["zone"] == "zone_value" client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2279,7 +1986,7 @@ def test_bulk_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2290,45 +1997,47 @@ def test_bulk_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.bulk_insert_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_bulk_insert_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.bulk_insert._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "bulkInsertInstanceResourceResource", - "project", - "zone", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_bulk_insert_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -2339,9 +2048,9 @@ def test_bulk_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_bulk_insert" + transports.InstancesRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_bulk_insert" + transports.InstancesRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2356,17 +2065,19 @@ def test_bulk_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InstanceAggregatedList.to_json( + compute.InstanceAggregatedList() + ) - request = compute.BulkInsertInstanceRequest() + request = compute.AggregatedListInstancesRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InstanceAggregatedList - client.bulk_insert_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -2378,8 +2089,8 @@ def test_bulk_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_bulk_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.BulkInsertInstanceRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListInstancesRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2387,166 +2098,7 @@ def test_bulk_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["bulk_insert_instance_resource_resource"] = { - "count": 553, - "instance_properties": { - "advanced_machine_features": { - "enable_nested_virtualization": True, - "enable_uefi_networking": True, - "threads_per_core": 1689, - }, - "can_ip_forward": True, - "confidential_instance_config": {"enable_confidential_compute": True}, - "description": "description_value", - "disks": [ - { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [ - {"content": "content_value", "file_type": "file_type_value"} - ], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", - } - ], - "guest_accelerators": [ - { - "accelerator_count": 1805, - "accelerator_type": "accelerator_type_value", - } - ], - "labels": {}, - "machine_type": "machine_type_value", - "metadata": { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", - }, - "min_cpu_platform": "min_cpu_platform_value", - "network_interfaces": [ - { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", - } - ], - "network_performance_config": { - "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" - }, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "reservation_affinity": { - "consume_reservation_type": "consume_reservation_type_value", - "key": "key_value", - "values": ["values_value_1", "values_value_2"], - }, - "resource_manager_tags": {}, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "scheduling": { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - }, - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} - ], - "shielded_instance_config": { - "enable_integrity_monitoring": True, - "enable_secure_boot": True, - "enable_vtpm": True, - }, - "tags": { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - }, - }, - "location_policy": {"locations": {}}, - "min_count": 972, - "name_pattern": "name_pattern_value", - "per_instance_properties": {}, - "source_instance_template": "source_instance_template_value", - } + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2558,10 +2110,10 @@ def test_bulk_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.bulk_insert_unary(request) + client.aggregated_list(request) -def test_bulk_insert_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2570,43 +2122,39 @@ def test_bulk_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - zone="zone_value", - bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( - count=553 - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.bulk_insert_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/bulkInsert" + "%s/compute/v1/projects/{project}/aggregated/instances" % client.transport._host, args[1], ) -def test_bulk_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2615,30 +2163,90 @@ def test_bulk_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.bulk_insert_unary( - compute.BulkInsertInstanceRequest(), + client.aggregated_list( + compute.AggregatedListInstancesRequest(), project="project_value", - zone="zone_value", - bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( - count=553 - ), ) -def test_bulk_insert_unary_rest_error(): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = InstancesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceAggregatedList( + items={ + "a": compute.InstancesScopedList(), + "b": compute.InstancesScopedList(), + "c": compute.InstancesScopedList(), + }, + next_page_token="abc", + ), + compute.InstanceAggregatedList( + items={}, + next_page_token="def", + ), + compute.InstanceAggregatedList( + items={ + "g": compute.InstancesScopedList(), + }, + next_page_token="ghi", + ), + compute.InstanceAggregatedList( + items={ + "h": compute.InstancesScopedList(), + "i": compute.InstancesScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.InstanceAggregatedList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.InstancesScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == (str, compute.InstancesScopedList) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.InstancesScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.DeleteInstanceRequest, + compute.AttachDiskInstanceRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_attach_disk_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2646,6 +2254,51 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["attached_disk_resource"] = { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2682,10 +2335,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.attach_disk(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2710,7 +2363,9 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteInstanceRequest): +def test_attach_disk_rest_required_fields( + request_type=compute.AttachDiskInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} @@ -2728,7 +2383,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).attach_disk._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2739,9 +2394,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).attach_disk._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "force_attach", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2770,9 +2430,10 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteInstanceRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2781,23 +2442,29 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteInstanceRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.attach_disk(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_attach_disk_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.attach_disk._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "forceAttach", + "requestId", + ) + ) & set( ( + "attachedDiskResource", "instance", "project", "zone", @@ -2807,7 +2474,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_attach_disk_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -2818,9 +2485,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_delete" + transports.InstancesRestInterceptor, "post_attach_disk" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_delete" + transports.InstancesRestInterceptor, "pre_attach_disk" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2837,7 +2504,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteInstanceRequest() + request = compute.AttachDiskInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2845,7 +2512,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.attach_disk( request, metadata=[ ("key", "val"), @@ -2857,8 +2524,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteInstanceRequest +def test_attach_disk_rest_bad_request( + transport: str = "rest", request_type=compute.AttachDiskInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2867,6 +2534,51 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["attached_disk_resource"] = { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2878,10 +2590,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.attach_disk(request) -def test_delete_unary_rest_flattened(): +def test_attach_disk_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2904,6 +2616,7 @@ def test_delete_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + attached_disk_resource=compute.AttachedDisk(auto_delete=True), ) mock_args.update(sample_request) @@ -2915,20 +2628,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.attach_disk(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/attachDisk" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_attach_disk_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2937,15 +2650,16 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteInstanceRequest(), + client.attach_disk( + compute.AttachDiskInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + attached_disk_resource=compute.AttachedDisk(auto_delete=True), ) -def test_delete_unary_rest_error(): +def test_attach_disk_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2954,11 +2668,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteAccessConfigInstanceRequest, + compute.AttachDiskInstanceRequest, dict, ], ) -def test_delete_access_config_unary_rest(request_type): +def test_attach_disk_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2966,21 +2680,66 @@ def test_delete_access_config_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", + request_init["attached_disk_resource"] = { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", name="name_value", operation_group_id="operation_group_id_value", operation_type="operation_type_value", @@ -3002,43 +2761,19 @@ def test_delete_access_config_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_access_config_unary(request) + response = client.attach_disk_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_access_config_unary_rest_required_fields( - request_type=compute.DeleteAccessConfigInstanceRequest, +def test_attach_disk_unary_rest_required_fields( + request_type=compute.AttachDiskInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} - request_init["access_config"] = "" request_init["instance"] = "" - request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3049,46 +2784,33 @@ def test_delete_access_config_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "accessConfig" not in jsonified_request - assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_access_config._get_unset_required_fields(jsonified_request) + ).attach_disk._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "accessConfig" in jsonified_request - assert jsonified_request["accessConfig"] == request_init["access_config"] - assert "networkInterface" in jsonified_request - assert jsonified_request["networkInterface"] == request_init["network_interface"] - jsonified_request["accessConfig"] = "access_config_value" jsonified_request["instance"] = "instance_value" - jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_access_config._get_unset_required_fields(jsonified_request) + ).attach_disk._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "access_config", - "network_interface", + "force_attach", "request_id", ) ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "accessConfig" in jsonified_request - assert jsonified_request["accessConfig"] == "access_config_value" assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" - assert "networkInterface" in jsonified_request - assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3115,6 +2837,7 @@ def test_delete_access_config_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3123,41 +2846,30 @@ def test_delete_access_config_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_access_config_unary(request) + response = client.attach_disk_unary(request) - expected_params = [ - ( - "accessConfig", - "", - ), - ( - "networkInterface", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_access_config_unary_rest_unset_required_fields(): +def test_attach_disk_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_access_config._get_unset_required_fields({}) + unset_fields = transport.attach_disk._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "accessConfig", - "networkInterface", + "forceAttach", "requestId", ) ) & set( ( - "accessConfig", + "attachedDiskResource", "instance", - "networkInterface", "project", "zone", ) @@ -3166,7 +2878,7 @@ def test_delete_access_config_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_access_config_unary_rest_interceptors(null_interceptor): +def test_attach_disk_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -3177,9 +2889,9 @@ def test_delete_access_config_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_delete_access_config" + transports.InstancesRestInterceptor, "post_attach_disk" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_delete_access_config" + transports.InstancesRestInterceptor, "pre_attach_disk" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3196,7 +2908,7 @@ def test_delete_access_config_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteAccessConfigInstanceRequest() + request = compute.AttachDiskInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3204,7 +2916,7 @@ def test_delete_access_config_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_access_config_unary( + client.attach_disk_unary( request, metadata=[ ("key", "val"), @@ -3216,8 +2928,8 @@ def test_delete_access_config_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_access_config_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteAccessConfigInstanceRequest +def test_attach_disk_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AttachDiskInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3226,6 +2938,51 @@ def test_delete_access_config_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["attached_disk_resource"] = { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [{"content": "content_value", "file_type": "file_type_value"}], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3237,10 +2994,10 @@ def test_delete_access_config_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_access_config_unary(request) + client.attach_disk_unary(request) -def test_delete_access_config_unary_rest_flattened(): +def test_attach_disk_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3263,8 +3020,7 @@ def test_delete_access_config_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - access_config="access_config_value", - network_interface="network_interface_value", + attached_disk_resource=compute.AttachedDisk(auto_delete=True), ) mock_args.update(sample_request) @@ -3276,20 +3032,20 @@ def test_delete_access_config_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_access_config_unary(**mock_args) + client.attach_disk_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/deleteAccessConfig" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/attachDisk" % client.transport._host, args[1], ) -def test_delete_access_config_unary_rest_flattened_error(transport: str = "rest"): +def test_attach_disk_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3298,17 +3054,16 @@ def test_delete_access_config_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_access_config_unary( - compute.DeleteAccessConfigInstanceRequest(), + client.attach_disk_unary( + compute.AttachDiskInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - access_config="access_config_value", - network_interface="network_interface_value", + attached_disk_resource=compute.AttachedDisk(auto_delete=True), ) -def test_delete_access_config_unary_rest_error(): +def test_attach_disk_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3317,58 +3072,217 @@ def test_delete_access_config_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DetachDiskInstanceRequest, + compute.BulkInsertInstanceRequest, dict, ], ) -def test_detach_disk_unary_rest(request_type): +def test_bulk_insert_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.detach_disk_unary(request) - + request_init = {"project": "sample1", "zone": "sample2"} + request_init["bulk_insert_instance_resource_resource"] = { + "count": 553, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "location_policy": {"locations": {}}, + "min_count": 972, + "name_pattern": "name_pattern_value", + "per_instance_properties": {}, + "source_instance_template": "source_instance_template_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.bulk_insert(request) + # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3393,14 +3307,12 @@ def test_detach_disk_unary_rest(request_type): assert response.zone == "zone_value" -def test_detach_disk_unary_rest_required_fields( - request_type=compute.DetachDiskInstanceRequest, +def test_bulk_insert_rest_required_fields( + request_type=compute.BulkInsertInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} - request_init["device_name"] = "" - request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3411,39 +3323,25 @@ def test_detach_disk_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "deviceName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).detach_disk._get_unset_required_fields(jsonified_request) + ).bulk_insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "deviceName" in jsonified_request - assert jsonified_request["deviceName"] == request_init["device_name"] - jsonified_request["deviceName"] = "device_name_value" - jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).detach_disk._get_unset_required_fields(jsonified_request) + ).bulk_insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "device_name", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "deviceName" in jsonified_request - assert jsonified_request["deviceName"] == "device_name_value" - assert "instance" in jsonified_request - assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3470,6 +3368,7 @@ def test_detach_disk_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3478,35 +3377,24 @@ def test_detach_disk_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.detach_disk_unary(request) + response = client.bulk_insert(request) - expected_params = [ - ( - "deviceName", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_detach_disk_unary_rest_unset_required_fields(): +def test_bulk_insert_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.detach_disk._get_unset_required_fields({}) + unset_fields = transport.bulk_insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "deviceName", - "requestId", - ) - ) + set(("requestId",)) & set( ( - "deviceName", - "instance", + "bulkInsertInstanceResourceResource", "project", "zone", ) @@ -3515,7 +3403,7 @@ def test_detach_disk_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_detach_disk_unary_rest_interceptors(null_interceptor): +def test_bulk_insert_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -3526,9 +3414,9 @@ def test_detach_disk_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_detach_disk" + transports.InstancesRestInterceptor, "post_bulk_insert" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_detach_disk" + transports.InstancesRestInterceptor, "pre_bulk_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3545,7 +3433,7 @@ def test_detach_disk_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DetachDiskInstanceRequest() + request = compute.BulkInsertInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3553,7 +3441,7 @@ def test_detach_disk_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.detach_disk_unary( + client.bulk_insert( request, metadata=[ ("key", "val"), @@ -3565,8 +3453,8 @@ def test_detach_disk_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_detach_disk_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DetachDiskInstanceRequest +def test_bulk_insert_rest_bad_request( + transport: str = "rest", request_type=compute.BulkInsertInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3574,7 +3462,166 @@ def test_detach_disk_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init = {"project": "sample1", "zone": "sample2"} + request_init["bulk_insert_instance_resource_resource"] = { + "count": 553, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "location_policy": {"locations": {}}, + "min_count": 972, + "name_pattern": "name_pattern_value", + "per_instance_properties": {}, + "source_instance_template": "source_instance_template_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3586,10 +3633,10 @@ def test_detach_disk_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.detach_disk_unary(request) + client.bulk_insert(request) -def test_detach_disk_unary_rest_flattened(): +def test_bulk_insert_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3601,18 +3648,15 @@ def test_detach_disk_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance": "sample3", - } + sample_request = {"project": "sample1", "zone": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - instance="instance_value", - device_name="device_name_value", + bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( + count=553 + ), ) mock_args.update(sample_request) @@ -3624,20 +3668,20 @@ def test_detach_disk_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.detach_disk_unary(**mock_args) + client.bulk_insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/detachDisk" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/bulkInsert" % client.transport._host, args[1], ) -def test_detach_disk_unary_rest_flattened_error(transport: str = "rest"): +def test_bulk_insert_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3646,16 +3690,17 @@ def test_detach_disk_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.detach_disk_unary( - compute.DetachDiskInstanceRequest(), + client.bulk_insert( + compute.BulkInsertInstanceRequest(), project="project_value", zone="zone_value", - instance="instance_value", - device_name="device_name_value", + bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( + count=553 + ), ) -def test_detach_disk_unary_rest_error(): +def test_bulk_insert_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3664,93 +3709,225 @@ def test_detach_disk_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetInstanceRequest, + compute.BulkInsertInstanceRequest, dict, ], ) -def test_get_rest(request_type): +def test_bulk_insert_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Instance( - can_ip_forward=True, - cpu_platform="cpu_platform_value", - creation_timestamp="creation_timestamp_value", - deletion_protection=True, - description="description_value", - fingerprint="fingerprint_value", - hostname="hostname_value", - id=205, - kind="kind_value", - label_fingerprint="label_fingerprint_value", - last_start_timestamp="last_start_timestamp_value", - last_stop_timestamp="last_stop_timestamp_value", - last_suspended_timestamp="last_suspended_timestamp_value", - machine_type="machine_type_value", - min_cpu_platform="min_cpu_platform_value", - name="name_value", - private_ipv6_google_access="private_ipv6_google_access_value", - resource_policies=["resource_policies_value"], - satisfies_pzs=True, - self_link="self_link_value", - source_machine_image="source_machine_image_value", - start_restricted=True, - status="status_value", - status_message="status_message_value", - zone="zone_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Instance.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.get(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, compute.Instance) - assert response.can_ip_forward is True - assert response.cpu_platform == "cpu_platform_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.deletion_protection is True - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.hostname == "hostname_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.last_start_timestamp == "last_start_timestamp_value" - assert response.last_stop_timestamp == "last_stop_timestamp_value" - assert response.last_suspended_timestamp == "last_suspended_timestamp_value" - assert response.machine_type == "machine_type_value" - assert response.min_cpu_platform == "min_cpu_platform_value" - assert response.name == "name_value" - assert response.private_ipv6_google_access == "private_ipv6_google_access_value" - assert response.resource_policies == ["resource_policies_value"] - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.source_machine_image == "source_machine_image_value" - assert response.start_restricted is True - assert response.status == "status_value" - assert response.status_message == "status_message_value" - assert response.zone == "zone_value" + request_init = {"project": "sample1", "zone": "sample2"} + request_init["bulk_insert_instance_resource_resource"] = { + "count": 553, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "location_policy": {"locations": {}}, + "min_count": 972, + "name_pattern": "name_pattern_value", + "per_instance_properties": {}, + "source_instance_template": "source_instance_template_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.bulk_insert_unary(request) + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetInstanceRequest): + +def test_bulk_insert_unary_rest_required_fields( + request_type=compute.BulkInsertInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} - request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3764,23 +3941,22 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).bulk_insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).bulk_insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "instance" in jsonified_request - assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3793,7 +3969,7 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Instance() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3804,35 +3980,36 @@ def test_get_rest_required_fields(request_type=compute.GetInstanceRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Instance.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.bulk_insert_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_bulk_insert_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.bulk_insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "instance", + "bulkInsertInstanceResourceResource", "project", "zone", ) @@ -3841,7 +4018,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_bulk_insert_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -3852,9 +4029,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get" + transports.InstancesRestInterceptor, "post_bulk_insert" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get" + transports.InstancesRestInterceptor, "pre_bulk_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3869,17 +4046,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Instance.to_json(compute.Instance()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetInstanceRequest() + request = compute.BulkInsertInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Instance + post.return_value = compute.Operation - client.get( + client.bulk_insert_unary( request, metadata=[ ("key", "val"), @@ -3891,8 +4068,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetInstanceRequest +def test_bulk_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.BulkInsertInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3900,9 +4077,168 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request = request_type(request_init) - + request_init = {"project": "sample1", "zone": "sample2"} + request_init["bulk_insert_instance_resource_resource"] = { + "count": 553, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "location_policy": {"locations": {}}, + "min_count": 972, + "name_pattern": "name_pattern_value", + "per_instance_properties": {}, + "source_instance_template": "source_instance_template_value", + } + request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. with mock.patch.object(Session, "request") as req, pytest.raises( core_exceptions.BadRequest @@ -3912,10 +4248,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.bulk_insert_unary(request) -def test_get_rest_flattened(): +def test_bulk_insert_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3924,45 +4260,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Instance() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance": "sample3", - } + sample_request = {"project": "sample1", "zone": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - instance="instance_value", + bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( + count=553 + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Instance.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.bulk_insert_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/bulkInsert" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_bulk_insert_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3971,15 +4305,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetInstanceRequest(), + client.bulk_insert_unary( + compute.BulkInsertInstanceRequest(), project="project_value", zone="zone_value", - instance="instance_value", + bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( + count=553 + ), ) -def test_get_rest_error(): +def test_bulk_insert_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3988,11 +4324,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetEffectiveFirewallsInstanceRequest, + compute.DeleteInstanceRequest, dict, ], ) -def test_get_effective_firewalls_rest(request_type): +def test_delete_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4005,30 +4341,70 @@ def test_get_effective_firewalls_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstancesGetEffectiveFirewallsResponse() + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstancesGetEffectiveFirewallsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_effective_firewalls(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InstancesGetEffectiveFirewallsResponse) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_effective_firewalls_rest_required_fields( - request_type=compute.GetEffectiveFirewallsInstanceRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} request_init["instance"] = "" - request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -4039,34 +4415,28 @@ def test_get_effective_firewalls_rest_required_fields( ) # verify fields with default values are dropped - assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "networkInterface" in jsonified_request - assert jsonified_request["networkInterface"] == request_init["network_interface"] jsonified_request["instance"] = "instance_value" - jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("network_interface",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" - assert "networkInterface" in jsonified_request - assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -4079,7 +4449,7 @@ def test_get_effective_firewalls_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstancesGetEffectiveFirewallsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4090,43 +4460,35 @@ def test_get_effective_firewalls_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstancesGetEffectiveFirewallsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_effective_firewalls(request) + response = client.delete(request) - expected_params = [ - ( - "networkInterface", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_effective_firewalls_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_effective_firewalls._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("networkInterface",)) + set(("requestId",)) & set( ( "instance", - "networkInterface", "project", "zone", ) @@ -4135,7 +4497,7 @@ def test_get_effective_firewalls_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_effective_firewalls_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -4146,9 +4508,9 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get_effective_firewalls" + transports.InstancesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get_effective_firewalls" + transports.InstancesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4163,21 +4525,17 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.InstancesGetEffectiveFirewallsResponse.to_json( - compute.InstancesGetEffectiveFirewallsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetEffectiveFirewallsInstanceRequest() + request = compute.DeleteInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstancesGetEffectiveFirewallsResponse + post.return_value = compute.Operation - client.get_effective_firewalls( + client.delete( request, metadata=[ ("key", "val"), @@ -4189,8 +4547,8 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_effective_firewalls_rest_bad_request( - transport: str = "rest", request_type=compute.GetEffectiveFirewallsInstanceRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4210,10 +4568,10 @@ def test_get_effective_firewalls_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_effective_firewalls(request) + client.delete(request) -def test_get_effective_firewalls_rest_flattened(): +def test_delete_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4222,7 +4580,7 @@ def test_get_effective_firewalls_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstancesGetEffectiveFirewallsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4236,34 +4594,31 @@ def test_get_effective_firewalls_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - network_interface="network_interface_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstancesGetEffectiveFirewallsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_effective_firewalls(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/getEffectiveFirewalls" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" % client.transport._host, args[1], ) -def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4272,16 +4627,15 @@ def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_effective_firewalls( - compute.GetEffectiveFirewallsInstanceRequest(), + client.delete( + compute.DeleteInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - network_interface="network_interface_value", ) -def test_get_effective_firewalls_rest_error(): +def test_delete_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4290,11 +4644,11 @@ def test_get_effective_firewalls_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetGuestAttributesInstanceRequest, + compute.DeleteInstanceRequest, dict, ], ) -def test_get_guest_attributes_rest(request_type): +def test_delete_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4307,34 +4661,44 @@ def test_get_guest_attributes_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.GuestAttributes( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - query_path="query_path_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - variable_key="variable_key_value", - variable_value="variable_value_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.GuestAttributes.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_guest_attributes(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.GuestAttributes) - assert response.kind == "kind_value" - assert response.query_path == "query_path_value" - assert response.self_link == "self_link_value" - assert response.variable_key == "variable_key_value" - assert response.variable_value == "variable_value_value" + assert isinstance(response, compute.Operation) -def test_get_guest_attributes_rest_required_fields( - request_type=compute.GetGuestAttributesInstanceRequest, -): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -4352,7 +4716,7 @@ def test_get_guest_attributes_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_guest_attributes._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4363,14 +4727,9 @@ def test_get_guest_attributes_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_guest_attributes._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "query_path", - "variable_key", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4388,7 +4747,7 @@ def test_get_guest_attributes_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.GuestAttributes() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4399,37 +4758,32 @@ def test_get_guest_attributes_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.GuestAttributes.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_guest_attributes(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_guest_attributes_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_guest_attributes._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "queryPath", - "variableKey", - ) - ) + set(("requestId",)) & set( ( "instance", @@ -4441,7 +4795,7 @@ def test_get_guest_attributes_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_guest_attributes_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -4452,9 +4806,9 @@ def test_get_guest_attributes_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get_guest_attributes" + transports.InstancesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get_guest_attributes" + transports.InstancesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4469,19 +4823,17 @@ def test_get_guest_attributes_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.GuestAttributes.to_json( - compute.GuestAttributes() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetGuestAttributesInstanceRequest() + request = compute.DeleteInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.GuestAttributes + post.return_value = compute.Operation - client.get_guest_attributes( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -4493,8 +4845,8 @@ def test_get_guest_attributes_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_guest_attributes_rest_bad_request( - transport: str = "rest", request_type=compute.GetGuestAttributesInstanceRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4514,10 +4866,10 @@ def test_get_guest_attributes_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_guest_attributes(request) + client.delete_unary(request) -def test_get_guest_attributes_rest_flattened(): +def test_delete_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4526,7 +4878,7 @@ def test_get_guest_attributes_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.GuestAttributes() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4546,25 +4898,25 @@ def test_get_guest_attributes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.GuestAttributes.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_guest_attributes(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/getGuestAttributes" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" % client.transport._host, args[1], ) -def test_get_guest_attributes_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4573,15 +4925,15 @@ def test_get_guest_attributes_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_guest_attributes( - compute.GetGuestAttributesInstanceRequest(), + client.delete_unary( + compute.DeleteInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", ) -def test_get_guest_attributes_rest_error(): +def test_delete_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4590,52 +4942,92 @@ def test_get_guest_attributes_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyInstanceRequest, + compute.DeleteAccessConfigInstanceRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_access_config_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete_access_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyInstanceRequest, +def test_delete_access_config_rest_required_fields( + request_type=compute.DeleteAccessConfigInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["access_config"] = "" + request_init["instance"] = "" + request_init["network_interface"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -4645,30 +5037,48 @@ def test_get_iam_policy_rest_required_fields( ) # verify fields with default values are dropped + assert "accessConfig" not in jsonified_request + assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete_access_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "accessConfig" in jsonified_request + assert jsonified_request["accessConfig"] == request_init["access_config"] + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] + jsonified_request["accessConfig"] = "access_config_value" + jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete_access_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set( + ( + "access_config", + "network_interface", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "accessConfig" in jsonified_request + assert jsonified_request["accessConfig"] == "access_config_value" + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -4679,7 +5089,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4690,36 +5100,53 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete_access_config(request) - expected_params = [] + expected_params = [ + ( + "accessConfig", + "", + ), + ( + "networkInterface", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_access_config_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.delete_access_config._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set( + ( + "accessConfig", + "networkInterface", + "requestId", + ) + ) & set( ( + "accessConfig", + "instance", + "networkInterface", "project", - "resource", "zone", ) ) @@ -4727,7 +5154,7 @@ def test_get_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_access_config_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -4738,9 +5165,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get_iam_policy" + transports.InstancesRestInterceptor, "post_delete_access_config" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get_iam_policy" + transports.InstancesRestInterceptor, "pre_delete_access_config" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4755,17 +5182,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyInstanceRequest() + request = compute.DeleteAccessConfigInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete_access_config( request, metadata=[ ("key", "val"), @@ -4777,8 +5204,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyInstanceRequest +def test_delete_access_config_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteAccessConfigInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4786,7 +5213,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4798,10 +5225,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete_access_config(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_access_config_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4810,45 +5237,47 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "instance": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", + instance="instance_value", + access_config="access_config_value", + network_interface="network_interface_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete_access_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/deleteAccessConfig" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_access_config_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4857,15 +5286,17 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyInstanceRequest(), + client.delete_access_config( + compute.DeleteAccessConfigInstanceRequest(), project="project_value", zone="zone_value", - resource="resource_value", + instance="instance_value", + access_config="access_config_value", + network_interface="network_interface_value", ) -def test_get_iam_policy_rest_error(): +def test_delete_access_config_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4874,11 +5305,11 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetScreenshotInstanceRequest, + compute.DeleteAccessConfigInstanceRequest, dict, ], ) -def test_get_screenshot_rest(request_type): +def test_delete_access_config_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4891,32 +5322,52 @@ def test_get_screenshot_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Screenshot( - contents="contents_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Screenshot.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_screenshot(request) + response = client.delete_access_config_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Screenshot) - assert response.contents == "contents_value" - assert response.kind == "kind_value" + assert isinstance(response, compute.Operation) -def test_get_screenshot_rest_required_fields( - request_type=compute.GetScreenshotInstanceRequest, +def test_delete_access_config_unary_rest_required_fields( + request_type=compute.DeleteAccessConfigInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["access_config"] = "" request_init["instance"] = "" + request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -4927,26 +5378,46 @@ def test_get_screenshot_rest_required_fields( ) # verify fields with default values are dropped + assert "accessConfig" not in jsonified_request + assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_screenshot._get_unset_required_fields(jsonified_request) + ).delete_access_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "accessConfig" in jsonified_request + assert jsonified_request["accessConfig"] == request_init["access_config"] + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] + jsonified_request["accessConfig"] = "access_config_value" jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_screenshot._get_unset_required_fields(jsonified_request) + ).delete_access_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "access_config", + "network_interface", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "accessConfig" in jsonified_request + assert jsonified_request["accessConfig"] == "access_config_value" assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -4959,7 +5430,7 @@ def test_get_screenshot_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Screenshot() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4970,35 +5441,52 @@ def test_get_screenshot_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Screenshot.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_screenshot(request) + response = client.delete_access_config_unary(request) - expected_params = [] + expected_params = [ + ( + "accessConfig", + "", + ), + ( + "networkInterface", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_screenshot_rest_unset_required_fields(): +def test_delete_access_config_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_screenshot._get_unset_required_fields({}) + unset_fields = transport.delete_access_config._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "accessConfig", + "networkInterface", + "requestId", + ) + ) & set( ( + "accessConfig", "instance", + "networkInterface", "project", "zone", ) @@ -5007,7 +5495,7 @@ def test_get_screenshot_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_screenshot_rest_interceptors(null_interceptor): +def test_delete_access_config_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -5018,9 +5506,9 @@ def test_get_screenshot_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get_screenshot" + transports.InstancesRestInterceptor, "post_delete_access_config" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get_screenshot" + transports.InstancesRestInterceptor, "pre_delete_access_config" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5035,17 +5523,17 @@ def test_get_screenshot_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Screenshot.to_json(compute.Screenshot()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetScreenshotInstanceRequest() + request = compute.DeleteAccessConfigInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Screenshot + post.return_value = compute.Operation - client.get_screenshot( + client.delete_access_config_unary( request, metadata=[ ("key", "val"), @@ -5057,8 +5545,8 @@ def test_get_screenshot_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_screenshot_rest_bad_request( - transport: str = "rest", request_type=compute.GetScreenshotInstanceRequest +def test_delete_access_config_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteAccessConfigInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5078,10 +5566,10 @@ def test_get_screenshot_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_screenshot(request) + client.delete_access_config_unary(request) -def test_get_screenshot_rest_flattened(): +def test_delete_access_config_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5090,7 +5578,7 @@ def test_get_screenshot_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Screenshot() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -5104,31 +5592,33 @@ def test_get_screenshot_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + access_config="access_config_value", + network_interface="network_interface_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Screenshot.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_screenshot(**mock_args) + client.delete_access_config_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/screenshot" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/deleteAccessConfig" % client.transport._host, args[1], ) -def test_get_screenshot_rest_flattened_error(transport: str = "rest"): +def test_delete_access_config_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5137,15 +5627,17 @@ def test_get_screenshot_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_screenshot( - compute.GetScreenshotInstanceRequest(), + client.delete_access_config_unary( + compute.DeleteAccessConfigInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + access_config="access_config_value", + network_interface="network_interface_value", ) -def test_get_screenshot_rest_error(): +def test_delete_access_config_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5154,11 +5646,11 @@ def test_get_screenshot_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetSerialPortOutputInstanceRequest, + compute.DetachDiskInstanceRequest, dict, ], ) -def test_get_serial_port_output_rest(request_type): +def test_detach_disk_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5171,37 +5663,72 @@ def test_get_serial_port_output_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SerialPortOutput( - contents="contents_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_=542, + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - start=558, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SerialPortOutput.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_serial_port_output(request) + response = client.detach_disk(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SerialPortOutput) - assert response.contents == "contents_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_ == 542 + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start == 558 + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_serial_port_output_rest_required_fields( - request_type=compute.GetSerialPortOutputInstanceRequest, +def test_detach_disk_rest_required_fields( + request_type=compute.DetachDiskInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["device_name"] = "" request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" @@ -5213,31 +5740,37 @@ def test_get_serial_port_output_rest_required_fields( ) # verify fields with default values are dropped + assert "deviceName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_serial_port_output._get_unset_required_fields(jsonified_request) + ).detach_disk._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == request_init["device_name"] + jsonified_request["deviceName"] = "device_name_value" jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_serial_port_output._get_unset_required_fields(jsonified_request) + ).detach_disk._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "port", - "start", + "device_name", + "request_id", ) ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == "device_name_value" assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request @@ -5252,7 +5785,7 @@ def test_get_serial_port_output_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SerialPortOutput() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -5263,39 +5796,45 @@ def test_get_serial_port_output_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SerialPortOutput.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_serial_port_output(request) + response = client.detach_disk(request) - expected_params = [] + expected_params = [ + ( + "deviceName", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_serial_port_output_rest_unset_required_fields(): +def test_detach_disk_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_serial_port_output._get_unset_required_fields({}) + unset_fields = transport.detach_disk._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "port", - "start", + "deviceName", + "requestId", ) ) & set( ( + "deviceName", "instance", "project", "zone", @@ -5305,7 +5844,7 @@ def test_get_serial_port_output_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_serial_port_output_rest_interceptors(null_interceptor): +def test_detach_disk_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -5316,9 +5855,9 @@ def test_get_serial_port_output_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get_serial_port_output" + transports.InstancesRestInterceptor, "post_detach_disk" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get_serial_port_output" + transports.InstancesRestInterceptor, "pre_detach_disk" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5333,19 +5872,17 @@ def test_get_serial_port_output_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SerialPortOutput.to_json( - compute.SerialPortOutput() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetSerialPortOutputInstanceRequest() + request = compute.DetachDiskInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SerialPortOutput + post.return_value = compute.Operation - client.get_serial_port_output( + client.detach_disk( request, metadata=[ ("key", "val"), @@ -5357,8 +5894,8 @@ def test_get_serial_port_output_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_serial_port_output_rest_bad_request( - transport: str = "rest", request_type=compute.GetSerialPortOutputInstanceRequest +def test_detach_disk_rest_bad_request( + transport: str = "rest", request_type=compute.DetachDiskInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5378,10 +5915,10 @@ def test_get_serial_port_output_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_serial_port_output(request) + client.detach_disk(request) -def test_get_serial_port_output_rest_flattened(): +def test_detach_disk_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5390,7 +5927,7 @@ def test_get_serial_port_output_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SerialPortOutput() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -5404,31 +5941,32 @@ def test_get_serial_port_output_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + device_name="device_name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SerialPortOutput.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_serial_port_output(**mock_args) + client.detach_disk(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/serialPort" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/detachDisk" % client.transport._host, args[1], ) -def test_get_serial_port_output_rest_flattened_error(transport: str = "rest"): +def test_detach_disk_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5437,15 +5975,16 @@ def test_get_serial_port_output_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_serial_port_output( - compute.GetSerialPortOutputInstanceRequest(), + client.detach_disk( + compute.DetachDiskInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + device_name="device_name_value", ) -def test_get_serial_port_output_rest_error(): +def test_detach_disk_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5454,11 +5993,11 @@ def test_get_serial_port_output_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetShieldedInstanceIdentityInstanceRequest, + compute.DetachDiskInstanceRequest, dict, ], ) -def test_get_shielded_instance_identity_rest(request_type): +def test_detach_disk_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5471,29 +6010,50 @@ def test_get_shielded_instance_identity_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ShieldedInstanceIdentity( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ShieldedInstanceIdentity.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_shielded_instance_identity(request) + response = client.detach_disk_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.ShieldedInstanceIdentity) - assert response.kind == "kind_value" + assert isinstance(response, compute.Operation) -def test_get_shielded_instance_identity_rest_required_fields( - request_type=compute.GetShieldedInstanceIdentityInstanceRequest, +def test_detach_disk_unary_rest_required_fields( + request_type=compute.DetachDiskInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["device_name"] = "" request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" @@ -5505,24 +6065,37 @@ def test_get_shielded_instance_identity_rest_required_fields( ) # verify fields with default values are dropped + assert "deviceName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_shielded_instance_identity._get_unset_required_fields(jsonified_request) + ).detach_disk._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == request_init["device_name"] + jsonified_request["deviceName"] = "device_name_value" jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_shielded_instance_identity._get_unset_required_fields(jsonified_request) + ).detach_disk._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "device_name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == "device_name_value" assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request @@ -5537,7 +6110,7 @@ def test_get_shielded_instance_identity_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ShieldedInstanceIdentity() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -5548,36 +6121,45 @@ def test_get_shielded_instance_identity_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ShieldedInstanceIdentity.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_shielded_instance_identity(request) + response = client.detach_disk_unary(request) - expected_params = [] + expected_params = [ + ( + "deviceName", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_shielded_instance_identity_rest_unset_required_fields(): +def test_detach_disk_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_shielded_instance_identity._get_unset_required_fields( - {} - ) + unset_fields = transport.detach_disk._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "deviceName", + "requestId", + ) + ) & set( ( + "deviceName", "instance", "project", "zone", @@ -5587,7 +6169,7 @@ def test_get_shielded_instance_identity_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_shielded_instance_identity_rest_interceptors(null_interceptor): +def test_detach_disk_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -5598,9 +6180,9 @@ def test_get_shielded_instance_identity_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_get_shielded_instance_identity" + transports.InstancesRestInterceptor, "post_detach_disk" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_get_shielded_instance_identity" + transports.InstancesRestInterceptor, "pre_detach_disk" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5615,19 +6197,17 @@ def test_get_shielded_instance_identity_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ShieldedInstanceIdentity.to_json( - compute.ShieldedInstanceIdentity() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetShieldedInstanceIdentityInstanceRequest() + request = compute.DetachDiskInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ShieldedInstanceIdentity + post.return_value = compute.Operation - client.get_shielded_instance_identity( + client.detach_disk_unary( request, metadata=[ ("key", "val"), @@ -5639,9 +6219,8 @@ def test_get_shielded_instance_identity_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_shielded_instance_identity_rest_bad_request( - transport: str = "rest", - request_type=compute.GetShieldedInstanceIdentityInstanceRequest, +def test_detach_disk_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DetachDiskInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5661,10 +6240,10 @@ def test_get_shielded_instance_identity_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_shielded_instance_identity(request) + client.detach_disk_unary(request) -def test_get_shielded_instance_identity_rest_flattened(): +def test_detach_disk_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5673,7 +6252,7 @@ def test_get_shielded_instance_identity_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ShieldedInstanceIdentity() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -5687,31 +6266,32 @@ def test_get_shielded_instance_identity_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + device_name="device_name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ShieldedInstanceIdentity.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_shielded_instance_identity(**mock_args) + client.detach_disk_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/getShieldedInstanceIdentity" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/detachDisk" % client.transport._host, args[1], ) -def test_get_shielded_instance_identity_rest_flattened_error(transport: str = "rest"): +def test_detach_disk_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5720,15 +6300,16 @@ def test_get_shielded_instance_identity_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_shielded_instance_identity( - compute.GetShieldedInstanceIdentityInstanceRequest(), + client.detach_disk_unary( + compute.DetachDiskInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + device_name="device_name_value", ) -def test_get_shielded_instance_identity_rest_error(): +def test_detach_disk_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5737,253 +6318,93 @@ def test_get_shielded_instance_identity_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertInstanceRequest, + compute.GetInstanceRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["instance_resource"] = { - "advanced_machine_features": { - "enable_nested_virtualization": True, - "enable_uefi_networking": True, - "threads_per_core": 1689, - }, - "can_ip_forward": True, - "confidential_instance_config": {"enable_confidential_compute": True}, - "cpu_platform": "cpu_platform_value", - "creation_timestamp": "creation_timestamp_value", - "deletion_protection": True, - "description": "description_value", - "disks": [ - { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [ - {"content": "content_value", "file_type": "file_type_value"} - ], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", - } - ], - "display_device": {"enable_display": True}, - "fingerprint": "fingerprint_value", - "guest_accelerators": [ - {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} - ], - "hostname": "hostname_value", - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_start_timestamp": "last_start_timestamp_value", - "last_stop_timestamp": "last_stop_timestamp_value", - "last_suspended_timestamp": "last_suspended_timestamp_value", - "machine_type": "machine_type_value", - "metadata": { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", - }, - "min_cpu_platform": "min_cpu_platform_value", - "name": "name_value", - "network_interfaces": [ - { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", - } - ], - "network_performance_config": { - "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" - }, - "params": {"resource_manager_tags": {}}, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "reservation_affinity": { - "consume_reservation_type": "consume_reservation_type_value", - "key": "key_value", - "values": ["values_value_1", "values_value_2"], - }, - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "scheduling": { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - }, - "self_link": "self_link_value", - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} - ], - "shielded_instance_config": { - "enable_integrity_monitoring": True, - "enable_secure_boot": True, - "enable_vtpm": True, - }, - "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, - "source_machine_image": "source_machine_image_value", - "source_machine_image_encryption_key": {}, - "start_restricted": True, - "status": "status_value", - "status_message": "status_message_value", - "tags": { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - }, - "zone": "zone_value", - } + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Instance( + can_ip_forward=True, + cpu_platform="cpu_platform_value", creation_timestamp="creation_timestamp_value", + deletion_protection=True, description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", + hostname="hostname_value", id=205, - insert_time="insert_time_value", kind="kind_value", + label_fingerprint="label_fingerprint_value", + last_start_timestamp="last_start_timestamp_value", + last_stop_timestamp="last_stop_timestamp_value", + last_suspended_timestamp="last_suspended_timestamp_value", + machine_type="machine_type_value", + min_cpu_platform="min_cpu_platform_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + private_ipv6_google_access="private_ipv6_google_access_value", + resource_policies=["resource_policies_value"], + satisfies_pzs=True, self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, + source_machine_image="source_machine_image_value", + start_restricted=True, + status="status_value", status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Instance.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Instance) + assert response.can_ip_forward is True + assert response.cpu_platform == "cpu_platform_value" assert response.creation_timestamp == "creation_timestamp_value" + assert response.deletion_protection is True assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" + assert response.hostname == "hostname_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.last_start_timestamp == "last_start_timestamp_value" + assert response.last_stop_timestamp == "last_stop_timestamp_value" + assert response.last_suspended_timestamp == "last_suspended_timestamp_value" + assert response.machine_type == "machine_type_value" + assert response.min_cpu_platform == "min_cpu_platform_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.private_ipv6_google_access == "private_ipv6_google_access_value" + assert response.resource_policies == ["resource_policies_value"] + assert response.satisfies_pzs is True assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE + assert response.source_machine_image == "source_machine_image_value" + assert response.start_restricted is True + assert response.status == "status_value" assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields(request_type=compute.InsertInstanceRequest): +def test_get_rest_required_fields(request_type=compute.GetInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} + request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -5997,28 +6418,23 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "source_instance_template", - "source_machine_image", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -6031,7 +6447,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertInstanceRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Instance() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -6042,42 +6458,35 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertInstanceRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Instance.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "sourceInstanceTemplate", - "sourceMachineImage", - ) - ) + set(()) & set( ( - "instanceResource", + "instance", "project", "zone", ) @@ -6086,7 +6495,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -6097,9 +6506,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_insert" + transports.InstancesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_insert" + transports.InstancesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6114,17 +6523,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Instance.to_json(compute.Instance()) - request = compute.InsertInstanceRequest() + request = compute.GetInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Instance - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -6136,8 +6545,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertInstanceRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6145,173 +6554,10989 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["instance_resource"] = { - "advanced_machine_features": { - "enable_nested_virtualization": True, - "enable_uefi_networking": True, - "threads_per_core": 1689, - }, - "can_ip_forward": True, - "confidential_instance_config": {"enable_confidential_compute": True}, - "cpu_platform": "cpu_platform_value", - "creation_timestamp": "creation_timestamp_value", - "deletion_protection": True, - "description": "description_value", - "disks": [ - { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [ - {"content": "content_value", "file_type": "file_type_value"} - ], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", - } - ], - "display_device": {"enable_display": True}, - "fingerprint": "fingerprint_value", - "guest_accelerators": [ - {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} - ], - "hostname": "hostname_value", - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_start_timestamp": "last_start_timestamp_value", - "last_stop_timestamp": "last_stop_timestamp_value", - "last_suspended_timestamp": "last_suspended_timestamp_value", - "machine_type": "machine_type_value", - "metadata": { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", - }, - "min_cpu_platform": "min_cpu_platform_value", - "name": "name_value", - "network_interfaces": [ - { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Instance() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Instance.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_get_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetEffectiveFirewallsInstanceRequest, + dict, + ], +) +def test_get_effective_firewalls_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstancesGetEffectiveFirewallsResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstancesGetEffectiveFirewallsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_effective_firewalls(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.InstancesGetEffectiveFirewallsResponse) + + +def test_get_effective_firewalls_rest_required_fields( + request_type=compute.GetEffectiveFirewallsInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["network_interface"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "networkInterface" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] + + jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("network_interface",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstancesGetEffectiveFirewallsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstancesGetEffectiveFirewallsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_effective_firewalls(request) + + expected_params = [ + ( + "networkInterface", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_effective_firewalls_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_effective_firewalls._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("networkInterface",)) + & set( + ( + "instance", + "networkInterface", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_effective_firewalls_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_get_effective_firewalls" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_get_effective_firewalls" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.InstancesGetEffectiveFirewallsResponse.to_json( + compute.InstancesGetEffectiveFirewallsResponse() + ) + ) + + request = compute.GetEffectiveFirewallsInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstancesGetEffectiveFirewallsResponse + + client.get_effective_firewalls( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_effective_firewalls_rest_bad_request( + transport: str = "rest", request_type=compute.GetEffectiveFirewallsInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_effective_firewalls(request) + + +def test_get_effective_firewalls_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstancesGetEffectiveFirewallsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + network_interface="network_interface_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstancesGetEffectiveFirewallsResponse.to_json( + return_value + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_effective_firewalls(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/getEffectiveFirewalls" + % client.transport._host, + args[1], + ) + + +def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_effective_firewalls( + compute.GetEffectiveFirewallsInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + network_interface="network_interface_value", + ) + + +def test_get_effective_firewalls_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetGuestAttributesInstanceRequest, + dict, + ], +) +def test_get_guest_attributes_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.GuestAttributes( + kind="kind_value", + query_path="query_path_value", + self_link="self_link_value", + variable_key="variable_key_value", + variable_value="variable_value_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.GuestAttributes.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_guest_attributes(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.GuestAttributes) + assert response.kind == "kind_value" + assert response.query_path == "query_path_value" + assert response.self_link == "self_link_value" + assert response.variable_key == "variable_key_value" + assert response.variable_value == "variable_value_value" + + +def test_get_guest_attributes_rest_required_fields( + request_type=compute.GetGuestAttributesInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_guest_attributes._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_guest_attributes._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "query_path", + "variable_key", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.GuestAttributes() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.GuestAttributes.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_guest_attributes(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_guest_attributes_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_guest_attributes._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "queryPath", + "variableKey", + ) + ) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_guest_attributes_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_get_guest_attributes" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_get_guest_attributes" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.GuestAttributes.to_json( + compute.GuestAttributes() + ) + + request = compute.GetGuestAttributesInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.GuestAttributes + + client.get_guest_attributes( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_guest_attributes_rest_bad_request( + transport: str = "rest", request_type=compute.GetGuestAttributesInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_guest_attributes(request) + + +def test_get_guest_attributes_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.GuestAttributes() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.GuestAttributes.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_guest_attributes(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/getGuestAttributes" + % client.transport._host, + args[1], + ) + + +def test_get_guest_attributes_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_guest_attributes( + compute.GetGuestAttributesInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_get_guest_attributes_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyInstanceRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "resource", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyInstanceRequest(), + project="project_value", + zone="zone_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetScreenshotInstanceRequest, + dict, + ], +) +def test_get_screenshot_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Screenshot( + contents="contents_value", + kind="kind_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Screenshot.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_screenshot(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Screenshot) + assert response.contents == "contents_value" + assert response.kind == "kind_value" + + +def test_get_screenshot_rest_required_fields( + request_type=compute.GetScreenshotInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_screenshot._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_screenshot._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Screenshot() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Screenshot.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_screenshot(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_screenshot_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_screenshot._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_screenshot_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_get_screenshot" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_get_screenshot" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Screenshot.to_json(compute.Screenshot()) + + request = compute.GetScreenshotInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Screenshot + + client.get_screenshot( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_screenshot_rest_bad_request( + transport: str = "rest", request_type=compute.GetScreenshotInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_screenshot(request) + + +def test_get_screenshot_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Screenshot() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Screenshot.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_screenshot(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/screenshot" + % client.transport._host, + args[1], + ) + + +def test_get_screenshot_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_screenshot( + compute.GetScreenshotInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_get_screenshot_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetSerialPortOutputInstanceRequest, + dict, + ], +) +def test_get_serial_port_output_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SerialPortOutput( + contents="contents_value", + kind="kind_value", + next_=542, + self_link="self_link_value", + start=558, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SerialPortOutput.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_serial_port_output(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.SerialPortOutput) + assert response.contents == "contents_value" + assert response.kind == "kind_value" + assert response.next_ == 542 + assert response.self_link == "self_link_value" + assert response.start == 558 + + +def test_get_serial_port_output_rest_required_fields( + request_type=compute.GetSerialPortOutputInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_serial_port_output._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_serial_port_output._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "port", + "start", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SerialPortOutput() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SerialPortOutput.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_serial_port_output(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_serial_port_output_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_serial_port_output._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "port", + "start", + ) + ) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_serial_port_output_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_get_serial_port_output" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_get_serial_port_output" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SerialPortOutput.to_json( + compute.SerialPortOutput() + ) + + request = compute.GetSerialPortOutputInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SerialPortOutput + + client.get_serial_port_output( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_serial_port_output_rest_bad_request( + transport: str = "rest", request_type=compute.GetSerialPortOutputInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_serial_port_output(request) + + +def test_get_serial_port_output_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SerialPortOutput() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SerialPortOutput.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_serial_port_output(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/serialPort" + % client.transport._host, + args[1], + ) + + +def test_get_serial_port_output_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_serial_port_output( + compute.GetSerialPortOutputInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_get_serial_port_output_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetShieldedInstanceIdentityInstanceRequest, + dict, + ], +) +def test_get_shielded_instance_identity_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ShieldedInstanceIdentity( + kind="kind_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ShieldedInstanceIdentity.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_shielded_instance_identity(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.ShieldedInstanceIdentity) + assert response.kind == "kind_value" + + +def test_get_shielded_instance_identity_rest_required_fields( + request_type=compute.GetShieldedInstanceIdentityInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_shielded_instance_identity._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_shielded_instance_identity._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ShieldedInstanceIdentity() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ShieldedInstanceIdentity.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_shielded_instance_identity(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_shielded_instance_identity_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_shielded_instance_identity._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set(()) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_shielded_instance_identity_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_get_shielded_instance_identity" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_get_shielded_instance_identity" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ShieldedInstanceIdentity.to_json( + compute.ShieldedInstanceIdentity() + ) + + request = compute.GetShieldedInstanceIdentityInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ShieldedInstanceIdentity + + client.get_shielded_instance_identity( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_shielded_instance_identity_rest_bad_request( + transport: str = "rest", + request_type=compute.GetShieldedInstanceIdentityInstanceRequest, +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_shielded_instance_identity(request) + + +def test_get_shielded_instance_identity_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ShieldedInstanceIdentity() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ShieldedInstanceIdentity.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_shielded_instance_identity(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/getShieldedInstanceIdentity" + % client.transport._host, + args[1], + ) + + +def test_get_shielded_instance_identity_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_shielded_instance_identity( + compute.GetShieldedInstanceIdentityInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_get_shielded_instance_identity_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_instance_template", + "source_machine_image", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceInstanceTemplate", + "sourceMachineImage", + ) + ) + & set( + ( + "instanceResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertInstanceRequest(), + project="project_value", + zone="zone_value", + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) + ), + ) + + +def test_insert_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInstanceRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_instance_template", + "source_machine_image", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceInstanceTemplate", + "sourceMachineImage", + ) + ) + & set( + ( + "instanceResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertInstanceRequest(), + project="project_value", + zone="zone_value", + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) + ), + ) + + +def test_insert_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListInstancesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListInstancesRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceList.to_json(compute.InstanceList()) + + request = compute.ListInstancesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListInstancesRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListInstancesRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceList( + items=[ + compute.Instance(), + compute.Instance(), + compute.Instance(), + ], + next_page_token="abc", + ), + compute.InstanceList( + items=[], + next_page_token="def", + ), + compute.InstanceList( + items=[ + compute.Instance(), + ], + next_page_token="ghi", + ), + compute.InstanceList( + items=[ + compute.Instance(), + compute.Instance(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.InstanceList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Instance) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListReferrersInstancesRequest, + dict, + ], +) +def test_list_referrers_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceListReferrers( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceListReferrers.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_referrers(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListReferrersPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_referrers_rest_required_fields( + request_type=compute.ListReferrersInstancesRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_referrers._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_referrers._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InstanceListReferrers() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceListReferrers.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_referrers(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_referrers_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_referrers._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_referrers_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_list_referrers" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_list_referrers" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InstanceListReferrers.to_json( + compute.InstanceListReferrers() + ) + + request = compute.ListReferrersInstancesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InstanceListReferrers + + client.list_referrers( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_referrers_rest_bad_request( + transport: str = "rest", request_type=compute.ListReferrersInstancesRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_referrers(request) + + +def test_list_referrers_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceListReferrers() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceListReferrers.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_referrers(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/referrers" + % client.transport._host, + args[1], + ) + + +def test_list_referrers_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_referrers( + compute.ListReferrersInstancesRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_list_referrers_rest_pager(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InstanceListReferrers( + items=[ + compute.Reference(), + compute.Reference(), + compute.Reference(), + ], + next_page_token="abc", + ), + compute.InstanceListReferrers( + items=[], + next_page_token="def", + ), + compute.InstanceListReferrers( + items=[ + compute.Reference(), + ], + next_page_token="ghi", + ), + compute.InstanceListReferrers( + items=[ + compute.Reference(), + compute.Reference(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.InstanceListReferrers.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + pager = client.list_referrers(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Reference) for i in results) + + pages = list(client.list_referrers(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveResourcePoliciesInstanceRequest, + dict, + ], +) +def test_remove_resource_policies_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_resource_policies(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_remove_resource_policies_rest_required_fields( + request_type=compute.RemoveResourcePoliciesInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_resource_policies(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_resource_policies_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesRemoveResourcePoliciesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_resource_policies_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_remove_resource_policies" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_remove_resource_policies" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveResourcePoliciesInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_resource_policies( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_resource_policies_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveResourcePoliciesInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_resource_policies(request) + + +def test_remove_resource_policies_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_remove_resource_policies_request_resource=compute.InstancesRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_resource_policies(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/removeResourcePolicies" + % client.transport._host, + args[1], + ) + + +def test_remove_resource_policies_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_resource_policies( + compute.RemoveResourcePoliciesInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_remove_resource_policies_request_resource=compute.InstancesRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + + +def test_remove_resource_policies_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveResourcePoliciesInstanceRequest, + dict, + ], +) +def test_remove_resource_policies_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_resource_policies_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_remove_resource_policies_unary_rest_required_fields( + request_type=compute.RemoveResourcePoliciesInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_resource_policies_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_resource_policies_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesRemoveResourcePoliciesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_remove_resource_policies" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_remove_resource_policies" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveResourcePoliciesInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_resource_policies_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_resource_policies_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveResourcePoliciesInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_resource_policies_unary(request) + + +def test_remove_resource_policies_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_remove_resource_policies_request_resource=compute.InstancesRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_resource_policies_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/removeResourcePolicies" + % client.transport._host, + args[1], + ) + + +def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_resource_policies_unary( + compute.RemoveResourcePoliciesInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_remove_resource_policies_request_resource=compute.InstancesRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + + +def test_remove_resource_policies_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResetInstanceRequest, + dict, + ], +) +def test_reset_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.reset(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_reset_rest_required_fields(request_type=compute.ResetInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).reset._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).reset._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.reset(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_reset_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.reset._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_reset_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_reset" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_reset" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResetInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.reset( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_reset_rest_bad_request( + transport: str = "rest", request_type=compute.ResetInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.reset(request) + + +def test_reset_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.reset(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/reset" + % client.transport._host, + args[1], + ) + + +def test_reset_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.reset( + compute.ResetInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_reset_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResetInstanceRequest, + dict, + ], +) +def test_reset_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.reset_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_reset_unary_rest_required_fields(request_type=compute.ResetInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).reset._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).reset._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.reset_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_reset_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.reset._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_reset_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_reset" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_reset" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResetInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.reset_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_reset_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ResetInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.reset_unary(request) + + +def test_reset_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.reset_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/reset" + % client.transport._host, + args[1], + ) + + +def test_reset_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.reset_unary( + compute.ResetInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_reset_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResumeInstanceRequest, + dict, + ], +) +def test_resume_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resume(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_resume_rest_required_fields(request_type=compute.ResumeInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resume._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resume._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resume(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resume_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resume._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resume_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_resume" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_resume" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResumeInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resume( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resume_rest_bad_request( + transport: str = "rest", request_type=compute.ResumeInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resume(request) + + +def test_resume_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resume(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/resume" + % client.transport._host, + args[1], + ) + + +def test_resume_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resume( + compute.ResumeInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_resume_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResumeInstanceRequest, + dict, + ], +) +def test_resume_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resume_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_resume_unary_rest_required_fields(request_type=compute.ResumeInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resume._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resume._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resume_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resume_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resume._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resume_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_resume" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_resume" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResumeInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resume_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resume_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ResumeInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resume_unary(request) + + +def test_resume_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resume_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/resume" + % client.transport._host, + args[1], + ) + + +def test_resume_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resume_unary( + compute.ResumeInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_resume_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SendDiagnosticInterruptInstanceRequest, + dict, + ], +) +def test_send_diagnostic_interrupt_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SendDiagnosticInterruptInstanceResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SendDiagnosticInterruptInstanceResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.send_diagnostic_interrupt(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.SendDiagnosticInterruptInstanceResponse) + + +def test_send_diagnostic_interrupt_rest_required_fields( + request_type=compute.SendDiagnosticInterruptInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).send_diagnostic_interrupt._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).send_diagnostic_interrupt._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SendDiagnosticInterruptInstanceResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SendDiagnosticInterruptInstanceResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.send_diagnostic_interrupt(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_send_diagnostic_interrupt_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.send_diagnostic_interrupt._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_send_diagnostic_interrupt_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_send_diagnostic_interrupt" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_send_diagnostic_interrupt" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.SendDiagnosticInterruptInstanceResponse.to_json( + compute.SendDiagnosticInterruptInstanceResponse() + ) + ) + + request = compute.SendDiagnosticInterruptInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SendDiagnosticInterruptInstanceResponse + + client.send_diagnostic_interrupt( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_send_diagnostic_interrupt_rest_bad_request( + transport: str = "rest", request_type=compute.SendDiagnosticInterruptInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.send_diagnostic_interrupt(request) + + +def test_send_diagnostic_interrupt_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SendDiagnosticInterruptInstanceResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SendDiagnosticInterruptInstanceResponse.to_json( + return_value + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.send_diagnostic_interrupt(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/sendDiagnosticInterrupt" + % client.transport._host, + args[1], + ) + + +def test_send_diagnostic_interrupt_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.send_diagnostic_interrupt( + compute.SendDiagnosticInterruptInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + ) + + +def test_send_diagnostic_interrupt_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetDeletionProtectionInstanceRequest, + dict, + ], +) +def test_set_deletion_protection_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_deletion_protection(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_deletion_protection_rest_required_fields( + request_type=compute.SetDeletionProtectionInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_deletion_protection._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_deletion_protection._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "deletion_protection", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_deletion_protection(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_deletion_protection_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_deletion_protection._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "deletionProtection", + "requestId", + ) + ) + & set( + ( + "project", + "resource", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_deletion_protection_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_deletion_protection" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_deletion_protection" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetDeletionProtectionInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_deletion_protection( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_deletion_protection_rest_bad_request( + transport: str = "rest", request_type=compute.SetDeletionProtectionInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_deletion_protection(request) + + +def test_set_deletion_protection_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_deletion_protection(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/setDeletionProtection" + % client.transport._host, + args[1], + ) + + +def test_set_deletion_protection_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_deletion_protection( + compute.SetDeletionProtectionInstanceRequest(), + project="project_value", + zone="zone_value", + resource="resource_value", + ) + + +def test_set_deletion_protection_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetDeletionProtectionInstanceRequest, + dict, + ], +) +def test_set_deletion_protection_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_deletion_protection_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_deletion_protection_unary_rest_required_fields( + request_type=compute.SetDeletionProtectionInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_deletion_protection._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_deletion_protection._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "deletion_protection", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_deletion_protection_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_deletion_protection_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_deletion_protection._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "deletionProtection", + "requestId", + ) + ) + & set( + ( + "project", + "resource", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_deletion_protection" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_deletion_protection" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetDeletionProtectionInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_deletion_protection_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_deletion_protection_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetDeletionProtectionInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_deletion_protection_unary(request) + + +def test_set_deletion_protection_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_deletion_protection_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/setDeletionProtection" + % client.transport._host, + args[1], + ) + + +def test_set_deletion_protection_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_deletion_protection_unary( + compute.SetDeletionProtectionInstanceRequest(), + project="project_value", + zone="zone_value", + resource="resource_value", + ) + + +def test_set_deletion_protection_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetDiskAutoDeleteInstanceRequest, + dict, + ], +) +def test_set_disk_auto_delete_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_disk_auto_delete(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_disk_auto_delete_rest_required_fields( + request_type=compute.SetDiskAutoDeleteInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["auto_delete"] = False + request_init["device_name"] = "" + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "autoDelete" not in jsonified_request + assert "deviceName" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_disk_auto_delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "autoDelete" in jsonified_request + assert jsonified_request["autoDelete"] == request_init["auto_delete"] + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == request_init["device_name"] + + jsonified_request["autoDelete"] = True + jsonified_request["deviceName"] = "device_name_value" + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_disk_auto_delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "auto_delete", + "device_name", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "autoDelete" in jsonified_request + assert jsonified_request["autoDelete"] == True + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == "device_name_value" + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_disk_auto_delete(request) + + expected_params = [ + ( + "autoDelete", + False, + ), + ( + "deviceName", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_disk_auto_delete_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_disk_auto_delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "autoDelete", + "deviceName", + "requestId", + ) + ) + & set( + ( + "autoDelete", + "deviceName", + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_disk_auto_delete_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_disk_auto_delete" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_disk_auto_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetDiskAutoDeleteInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_disk_auto_delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_disk_auto_delete_rest_bad_request( + transport: str = "rest", request_type=compute.SetDiskAutoDeleteInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_disk_auto_delete(request) + + +def test_set_disk_auto_delete_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + auto_delete=True, + device_name="device_name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_disk_auto_delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete" + % client.transport._host, + args[1], + ) + + +def test_set_disk_auto_delete_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_disk_auto_delete( + compute.SetDiskAutoDeleteInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + auto_delete=True, + device_name="device_name_value", + ) + + +def test_set_disk_auto_delete_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetDiskAutoDeleteInstanceRequest, + dict, + ], +) +def test_set_disk_auto_delete_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_disk_auto_delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_disk_auto_delete_unary_rest_required_fields( + request_type=compute.SetDiskAutoDeleteInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["auto_delete"] = False + request_init["device_name"] = "" + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "autoDelete" not in jsonified_request + assert "deviceName" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_disk_auto_delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "autoDelete" in jsonified_request + assert jsonified_request["autoDelete"] == request_init["auto_delete"] + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == request_init["device_name"] + + jsonified_request["autoDelete"] = True + jsonified_request["deviceName"] = "device_name_value" + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_disk_auto_delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "auto_delete", + "device_name", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "autoDelete" in jsonified_request + assert jsonified_request["autoDelete"] == True + assert "deviceName" in jsonified_request + assert jsonified_request["deviceName"] == "device_name_value" + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_disk_auto_delete_unary(request) + + expected_params = [ + ( + "autoDelete", + False, + ), + ( + "deviceName", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_disk_auto_delete_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_disk_auto_delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "autoDelete", + "deviceName", + "requestId", + ) + ) + & set( + ( + "autoDelete", + "deviceName", + "instance", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_disk_auto_delete" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_disk_auto_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetDiskAutoDeleteInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_disk_auto_delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_disk_auto_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetDiskAutoDeleteInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_disk_auto_delete_unary(request) + + +def test_set_disk_auto_delete_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + auto_delete=True, + device_name="device_name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_disk_auto_delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete" + % client.transport._host, + args[1], + ) + + +def test_set_disk_auto_delete_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_disk_auto_delete_unary( + compute.SetDiskAutoDeleteInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + auto_delete=True, + device_name="device_name_value", + ) + + +def test_set_disk_auto_delete_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyInstanceRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicyInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "resource", + "zone", + "zoneSetPolicyRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.SetIamPolicyInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicyInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicyInstanceRequest(), + project="project_value", + zone="zone_value", + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsInstanceRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_labels(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_labels_rest_required_fields(request_type=compute.SetLabelsInstanceRequest): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_labels(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_labels_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_labels._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetLabelsRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_labels_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_labels" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetLabelsInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_labels( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_labels(request) + + +def test_set_labels_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_labels_request_resource=compute.InstancesSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_labels(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_labels( + compute.SetLabelsInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_labels_request_resource=compute.InstancesSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsInstanceRequest, + dict, + ], +) +def test_set_labels_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_labels_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_labels_unary_rest_required_fields( + request_type=compute.SetLabelsInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_labels._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_labels_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_labels_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_labels._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetLabelsRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_labels_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_labels" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetLabelsInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_labels_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_labels_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_labels_unary(request) + + +def test_set_labels_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_labels_request_resource=compute.InstancesSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_labels_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_labels_unary( + compute.SetLabelsInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_labels_request_resource=compute.InstancesSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMachineResourcesInstanceRequest, + dict, + ], +) +def test_set_machine_resources_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_resources_request_resource"] = { + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_machine_resources(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_machine_resources_rest_required_fields( + request_type=compute.SetMachineResourcesInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_resources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_resources._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_machine_resources(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_machine_resources_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_machine_resources._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetMachineResourcesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_machine_resources_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_machine_resources" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_machine_resources" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMachineResourcesInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_machine_resources( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_machine_resources_rest_bad_request( + transport: str = "rest", request_type=compute.SetMachineResourcesInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_resources_request_resource"] = { + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_machine_resources(request) + + +def test_set_machine_resources_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_resources_request_resource=compute.InstancesSetMachineResourcesRequest( + guest_accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_machine_resources(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineResources" + % client.transport._host, + args[1], + ) + + +def test_set_machine_resources_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_machine_resources( + compute.SetMachineResourcesInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_resources_request_resource=compute.InstancesSetMachineResourcesRequest( + guest_accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] + ), + ) + + +def test_set_machine_resources_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMachineResourcesInstanceRequest, + dict, + ], +) +def test_set_machine_resources_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_resources_request_resource"] = { + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_machine_resources_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_machine_resources_unary_rest_required_fields( + request_type=compute.SetMachineResourcesInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_resources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_resources._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_machine_resources_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_machine_resources_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_machine_resources._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetMachineResourcesRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_machine_resources_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_machine_resources" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_machine_resources" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMachineResourcesInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_machine_resources_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_machine_resources_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetMachineResourcesInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_resources_request_resource"] = { + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_machine_resources_unary(request) + + +def test_set_machine_resources_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_resources_request_resource=compute.InstancesSetMachineResourcesRequest( + guest_accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_machine_resources_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineResources" + % client.transport._host, + args[1], + ) + + +def test_set_machine_resources_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_machine_resources_unary( + compute.SetMachineResourcesInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_resources_request_resource=compute.InstancesSetMachineResourcesRequest( + guest_accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] + ), + ) + + +def test_set_machine_resources_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMachineTypeInstanceRequest, + dict, + ], +) +def test_set_machine_type_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_type_request_resource"] = { + "machine_type": "machine_type_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_machine_type(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_machine_type_rest_required_fields( + request_type=compute.SetMachineTypeInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_type._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_type._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_machine_type(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_machine_type_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_machine_type._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetMachineTypeRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_machine_type_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_machine_type" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_machine_type" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMachineTypeInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_machine_type( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_machine_type_rest_bad_request( + transport: str = "rest", request_type=compute.SetMachineTypeInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_type_request_resource"] = { + "machine_type": "machine_type_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_machine_type(request) + + +def test_set_machine_type_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_type_request_resource=compute.InstancesSetMachineTypeRequest( + machine_type="machine_type_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_machine_type(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineType" + % client.transport._host, + args[1], + ) + + +def test_set_machine_type_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_machine_type( + compute.SetMachineTypeInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_type_request_resource=compute.InstancesSetMachineTypeRequest( + machine_type="machine_type_value" + ), + ) + + +def test_set_machine_type_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMachineTypeInstanceRequest, + dict, + ], +) +def test_set_machine_type_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_type_request_resource"] = { + "machine_type": "machine_type_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_machine_type_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_machine_type_unary_rest_required_fields( + request_type=compute.SetMachineTypeInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_type._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_machine_type._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_machine_type_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_machine_type_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_machine_type._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetMachineTypeRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_machine_type_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_machine_type" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_machine_type" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMachineTypeInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_machine_type_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_machine_type_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetMachineTypeInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_machine_type_request_resource"] = { + "machine_type": "machine_type_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_machine_type_unary(request) + + +def test_set_machine_type_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_type_request_resource=compute.InstancesSetMachineTypeRequest( + machine_type="machine_type_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_machine_type_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineType" + % client.transport._host, + args[1], + ) + + +def test_set_machine_type_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_machine_type_unary( + compute.SetMachineTypeInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_machine_type_request_resource=compute.InstancesSetMachineTypeRequest( + machine_type="machine_type_value" + ), + ) + + +def test_set_machine_type_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMetadataInstanceRequest, + dict, + ], +) +def test_set_metadata_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_metadata(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_metadata_rest_required_fields( + request_type=compute.SetMetadataInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_metadata._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_metadata._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_metadata(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_metadata_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_metadata._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "metadataResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_metadata_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_metadata" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_metadata" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMetadataInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_metadata( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_metadata_rest_bad_request( + transport: str = "rest", request_type=compute.SetMetadataInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_metadata(request) + + +def test_set_metadata_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_metadata(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMetadata" + % client.transport._host, + args[1], + ) + + +def test_set_metadata_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_metadata( + compute.SetMetadataInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + ) + + +def test_set_metadata_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMetadataInstanceRequest, + dict, + ], +) +def test_set_metadata_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_metadata_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_metadata_unary_rest_required_fields( + request_type=compute.SetMetadataInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_metadata._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_metadata._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_metadata_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_metadata_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_metadata._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "metadataResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_metadata_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_metadata" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_metadata" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMetadataInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_metadata_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_metadata_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetMetadataInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_metadata_unary(request) + + +def test_set_metadata_unary_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_metadata_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMetadata" + % client.transport._host, + args[1], + ) + + +def test_set_metadata_unary_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_metadata_unary( + compute.SetMetadataInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + ) + + +def test_set_metadata_unary_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMinCpuPlatformInstanceRequest, + dict, + ], +) +def test_set_min_cpu_platform_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_min_cpu_platform_request_resource"] = { + "min_cpu_platform": "min_cpu_platform_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_min_cpu_platform(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_min_cpu_platform_rest_required_fields( + request_type=compute.SetMinCpuPlatformInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_min_cpu_platform._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_min_cpu_platform._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_min_cpu_platform(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_min_cpu_platform_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_min_cpu_platform._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetMinCpuPlatformRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_min_cpu_platform_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_min_cpu_platform" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_min_cpu_platform" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMinCpuPlatformInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_min_cpu_platform( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_min_cpu_platform_rest_bad_request( + transport: str = "rest", request_type=compute.SetMinCpuPlatformInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_min_cpu_platform_request_resource"] = { + "min_cpu_platform": "min_cpu_platform_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_min_cpu_platform(request) + + +def test_set_min_cpu_platform_rest_flattened(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_min_cpu_platform_request_resource=compute.InstancesSetMinCpuPlatformRequest( + min_cpu_platform="min_cpu_platform_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_min_cpu_platform(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMinCpuPlatform" + % client.transport._host, + args[1], + ) + + +def test_set_min_cpu_platform_rest_flattened_error(transport: str = "rest"): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_min_cpu_platform( + compute.SetMinCpuPlatformInstanceRequest(), + project="project_value", + zone="zone_value", + instance="instance_value", + instances_set_min_cpu_platform_request_resource=compute.InstancesSetMinCpuPlatformRequest( + min_cpu_platform="min_cpu_platform_value" + ), + ) + + +def test_set_min_cpu_platform_rest_error(): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetMinCpuPlatformInstanceRequest, + dict, + ], +) +def test_set_min_cpu_platform_unary_rest(request_type): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_min_cpu_platform_request_resource"] = { + "min_cpu_platform": "min_cpu_platform_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_min_cpu_platform_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_min_cpu_platform_unary_rest_required_fields( + request_type=compute.SetMinCpuPlatformInstanceRequest, +): + transport_class = transports.InstancesRestTransport + + request_init = {} + request_init["instance"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_min_cpu_platform._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instance"] = "instance_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_min_cpu_platform._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, } - ], - "network_performance_config": { - "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" - }, - "params": {"resource_manager_tags": {}}, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "reservation_affinity": { - "consume_reservation_type": "consume_reservation_type_value", - "key": "key_value", - "values": ["values_value_1", "values_value_2"], - }, - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "scheduling": { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_min_cpu_platform_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_min_cpu_platform_unary_rest_unset_required_fields(): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_min_cpu_platform._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instance", + "instancesSetMinCpuPlatformRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): + transport = transports.InstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), + ) + client = InstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InstancesRestInterceptor, "post_set_min_cpu_platform" + ) as post, mock.patch.object( + transports.InstancesRestInterceptor, "pre_set_min_cpu_platform" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetMinCpuPlatformInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_min_cpu_platform_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - }, - "self_link": "self_link_value", - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} - ], - "shielded_instance_config": { - "enable_integrity_monitoring": True, - "enable_secure_boot": True, - "enable_vtpm": True, - }, - "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, - "source_machine_image": "source_machine_image_value", - "source_machine_image_encryption_key": {}, - "start_restricted": True, - "status": "status_value", - "status_message": "status_message_value", - "tags": { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - }, - "zone": "zone_value", + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_min_cpu_platform_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetMinCpuPlatformInstanceRequest +): + client = InstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_min_cpu_platform_request_resource"] = { + "min_cpu_platform": "min_cpu_platform_value" } request = request_type(request_init) @@ -6324,10 +17549,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.set_min_cpu_platform_unary(request) -def test_insert_unary_rest_flattened(): +def test_set_min_cpu_platform_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6339,16 +17564,19 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - instance_resource=compute.Instance( - advanced_machine_features=compute.AdvancedMachineFeatures( - enable_nested_virtualization=True - ) + instance="instance_value", + instances_set_min_cpu_platform_request_resource=compute.InstancesSetMinCpuPlatformRequest( + min_cpu_platform="min_cpu_platform_value" ), ) mock_args.update(sample_request) @@ -6361,20 +17589,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.set_min_cpu_platform_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMinCpuPlatform" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_set_min_cpu_platform_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6383,19 +17611,18 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertInstanceRequest(), + client.set_min_cpu_platform_unary( + compute.SetMinCpuPlatformInstanceRequest(), project="project_value", zone="zone_value", - instance_resource=compute.Instance( - advanced_machine_features=compute.AdvancedMachineFeatures( - enable_nested_virtualization=True - ) + instance="instance_value", + instances_set_min_cpu_platform_request_resource=compute.InstancesSetMinCpuPlatformRequest( + min_cpu_platform="min_cpu_platform_value" ), ) -def test_insert_unary_rest_error(): +def test_set_min_cpu_platform_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6404,50 +17631,105 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListInstancesRequest, + compute.SetSchedulingInstanceRequest, dict, ], ) -def test_list_rest(request_type): +def test_set_scheduling_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["scheduling_resource"] = { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_scheduling(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListInstancesRequest): +def test_set_scheduling_rest_required_fields( + request_type=compute.SetSchedulingInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} + request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -6461,30 +17743,25 @@ def test_list_rest_required_fields(request_type=compute.ListInstancesRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_scheduling._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_scheduling._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -6497,7 +17774,7 @@ def test_list_rest_required_fields(request_type=compute.ListInstancesRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -6508,43 +17785,38 @@ def test_list_rest_required_fields(request_type=compute.ListInstancesRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_scheduling(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_scheduling_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_scheduling._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "instance", "project", + "schedulingResource", "zone", ) ) @@ -6552,7 +17824,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_scheduling_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -6563,9 +17835,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_list" + transports.InstancesRestInterceptor, "post_set_scheduling" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_list" + transports.InstancesRestInterceptor, "pre_set_scheduling" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6580,17 +17852,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceList.to_json(compute.InstanceList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListInstancesRequest() + request = compute.SetSchedulingInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceList + post.return_value = compute.Operation - client.list( + client.set_scheduling( request, metadata=[ ("key", "val"), @@ -6602,8 +17874,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListInstancesRequest +def test_set_scheduling_rest_bad_request( + transport: str = "rest", request_type=compute.SetSchedulingInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6611,7 +17883,23 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["scheduling_resource"] = { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6623,10 +17911,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_scheduling(request) -def test_list_rest_flattened(): +def test_set_scheduling_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6635,40 +17923,46 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "instance": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", + instance="instance_value", + scheduling_resource=compute.Scheduling(automatic_restart=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_scheduling(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setScheduling" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_scheduling_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6677,82 +17971,29 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListInstancesRequest(), + client.set_scheduling( + compute.SetSchedulingInstanceRequest(), project="project_value", zone="zone_value", + instance="instance_value", + scheduling_resource=compute.Scheduling(automatic_restart=True), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_scheduling_rest_error(): client = InstancesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceList( - items=[ - compute.Instance(), - compute.Instance(), - compute.Instance(), - ], - next_page_token="abc", - ), - compute.InstanceList( - items=[], - next_page_token="def", - ), - compute.InstanceList( - items=[ - compute.Instance(), - ], - next_page_token="ghi", - ), - compute.InstanceList( - items=[ - compute.Instance(), - compute.Instance(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.InstanceList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Instance) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListReferrersInstancesRequest, + compute.SetSchedulingInstanceRequest, dict, ], ) -def test_list_referrers_rest(request_type): +def test_set_scheduling_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6760,36 +18001,66 @@ def test_list_referrers_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["scheduling_resource"] = { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceListReferrers( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceListReferrers.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_referrers(request) + response = client.set_scheduling_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListReferrersPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_referrers_rest_required_fields( - request_type=compute.ListReferrersInstancesRequest, +def test_set_scheduling_unary_rest_required_fields( + request_type=compute.SetSchedulingInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -6808,7 +18079,7 @@ def test_list_referrers_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_referrers._get_unset_required_fields(jsonified_request) + ).set_scheduling._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -6819,17 +18090,9 @@ def test_list_referrers_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_referrers._get_unset_required_fields(jsonified_request) + ).set_scheduling._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -6847,7 +18110,7 @@ def test_list_referrers_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceListReferrers() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -6858,44 +18121,38 @@ def test_list_referrers_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceListReferrers.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_referrers(request) + response = client.set_scheduling_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_referrers_rest_unset_required_fields(): +def test_set_scheduling_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.list_referrers._get_unset_required_fields({}) - assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + ) + + unset_fields = transport.set_scheduling._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) & set( ( "instance", "project", + "schedulingResource", "zone", ) ) @@ -6903,7 +18160,7 @@ def test_list_referrers_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_referrers_rest_interceptors(null_interceptor): +def test_set_scheduling_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -6914,9 +18171,9 @@ def test_list_referrers_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_list_referrers" + transports.InstancesRestInterceptor, "post_set_scheduling" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_list_referrers" + transports.InstancesRestInterceptor, "pre_set_scheduling" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6931,19 +18188,17 @@ def test_list_referrers_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceListReferrers.to_json( - compute.InstanceListReferrers() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListReferrersInstancesRequest() + request = compute.SetSchedulingInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceListReferrers + post.return_value = compute.Operation - client.list_referrers( + client.set_scheduling_unary( request, metadata=[ ("key", "val"), @@ -6955,8 +18210,8 @@ def test_list_referrers_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_referrers_rest_bad_request( - transport: str = "rest", request_type=compute.ListReferrersInstancesRequest +def test_set_scheduling_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetSchedulingInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6965,6 +18220,22 @@ def test_list_referrers_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["scheduling_resource"] = { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6976,10 +18247,10 @@ def test_list_referrers_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_referrers(request) + client.set_scheduling_unary(request) -def test_list_referrers_rest_flattened(): +def test_set_scheduling_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6988,7 +18259,7 @@ def test_list_referrers_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceListReferrers() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -7002,31 +18273,32 @@ def test_list_referrers_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + scheduling_resource=compute.Scheduling(automatic_restart=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceListReferrers.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_referrers(**mock_args) + client.set_scheduling_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/referrers" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setScheduling" % client.transport._host, args[1], ) -def test_list_referrers_rest_flattened_error(transport: str = "rest"): +def test_set_scheduling_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7035,87 +18307,29 @@ def test_list_referrers_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_referrers( - compute.ListReferrersInstancesRequest(), + client.set_scheduling_unary( + compute.SetSchedulingInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + scheduling_resource=compute.Scheduling(automatic_restart=True), ) -def test_list_referrers_rest_pager(transport: str = "rest"): +def test_set_scheduling_unary_rest_error(): client = InstancesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InstanceListReferrers( - items=[ - compute.Reference(), - compute.Reference(), - compute.Reference(), - ], - next_page_token="abc", - ), - compute.InstanceListReferrers( - items=[], - next_page_token="def", - ), - compute.InstanceListReferrers( - items=[ - compute.Reference(), - ], - next_page_token="ghi", - ), - compute.InstanceListReferrers( - items=[ - compute.Reference(), - compute.Reference(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.InstanceListReferrers.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "zone": "sample2", - "instance": "sample3", - } - - pager = client.list_referrers(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Reference) for i in results) - - pages = list(client.list_referrers(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.RemoveResourcePoliciesInstanceRequest, + compute.SetServiceAccountInstanceRequest, dict, ], ) -def test_remove_resource_policies_unary_rest(request_type): +def test_set_service_account_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7123,8 +18337,9 @@ def test_remove_resource_policies_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_remove_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + request_init["instances_set_service_account_request_resource"] = { + "email": "email_value", + "scopes": ["scopes_value_1", "scopes_value_2"], } request = request_type(request_init) @@ -7162,10 +18377,10 @@ def test_remove_resource_policies_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_resource_policies_unary(request) + response = client.set_service_account(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -7190,8 +18405,8 @@ def test_remove_resource_policies_unary_rest(request_type): assert response.zone == "zone_value" -def test_remove_resource_policies_unary_rest_required_fields( - request_type=compute.RemoveResourcePoliciesInstanceRequest, +def test_set_service_account_rest_required_fields( + request_type=compute.SetServiceAccountInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -7210,7 +18425,7 @@ def test_remove_resource_policies_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_resource_policies._get_unset_required_fields(jsonified_request) + ).set_service_account._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -7221,7 +18436,7 @@ def test_remove_resource_policies_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_resource_policies._get_unset_required_fields(jsonified_request) + ).set_service_account._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -7264,25 +18479,25 @@ def test_remove_resource_policies_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_resource_policies_unary(request) + response = client.set_service_account(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_resource_policies_unary_rest_unset_required_fields(): +def test_set_service_account_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + unset_fields = transport.set_service_account._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", - "instancesRemoveResourcePoliciesRequestResource", + "instancesSetServiceAccountRequestResource", "project", "zone", ) @@ -7291,7 +18506,7 @@ def test_remove_resource_policies_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): +def test_set_service_account_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -7302,9 +18517,9 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_remove_resource_policies" + transports.InstancesRestInterceptor, "post_set_service_account" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_remove_resource_policies" + transports.InstancesRestInterceptor, "pre_set_service_account" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -7321,7 +18536,7 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveResourcePoliciesInstanceRequest() + request = compute.SetServiceAccountInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -7329,7 +18544,7 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_resource_policies_unary( + client.set_service_account( request, metadata=[ ("key", "val"), @@ -7341,8 +18556,8 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_resource_policies_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemoveResourcePoliciesInstanceRequest +def test_set_service_account_rest_bad_request( + transport: str = "rest", request_type=compute.SetServiceAccountInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7351,8 +18566,9 @@ def test_remove_resource_policies_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_remove_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + request_init["instances_set_service_account_request_resource"] = { + "email": "email_value", + "scopes": ["scopes_value_1", "scopes_value_2"], } request = request_type(request_init) @@ -7365,10 +18581,10 @@ def test_remove_resource_policies_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_resource_policies_unary(request) + client.set_service_account(request) -def test_remove_resource_policies_unary_rest_flattened(): +def test_set_service_account_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7391,8 +18607,8 @@ def test_remove_resource_policies_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_remove_resource_policies_request_resource=compute.InstancesRemoveResourcePoliciesRequest( - resource_policies=["resource_policies_value"] + instances_set_service_account_request_resource=compute.InstancesSetServiceAccountRequest( + email="email_value" ), ) mock_args.update(sample_request) @@ -7405,20 +18621,20 @@ def test_remove_resource_policies_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_resource_policies_unary(**mock_args) + client.set_service_account(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/removeResourcePolicies" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setServiceAccount" % client.transport._host, args[1], ) -def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "rest"): +def test_set_service_account_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7427,18 +18643,18 @@ def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_resource_policies_unary( - compute.RemoveResourcePoliciesInstanceRequest(), + client.set_service_account( + compute.SetServiceAccountInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_remove_resource_policies_request_resource=compute.InstancesRemoveResourcePoliciesRequest( - resource_policies=["resource_policies_value"] + instances_set_service_account_request_resource=compute.InstancesSetServiceAccountRequest( + email="email_value" ), ) -def test_remove_resource_policies_unary_rest_error(): +def test_set_service_account_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -7447,11 +18663,11 @@ def test_remove_resource_policies_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ResetInstanceRequest, + compute.SetServiceAccountInstanceRequest, dict, ], ) -def test_reset_unary_rest(request_type): +def test_set_service_account_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7459,6 +18675,10 @@ def test_reset_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_service_account_request_resource"] = { + "email": "email_value", + "scopes": ["scopes_value_1", "scopes_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -7495,35 +18715,15 @@ def test_reset_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.reset_unary(request) + response = client.set_service_account_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_reset_unary_rest_required_fields(request_type=compute.ResetInstanceRequest): +def test_set_service_account_unary_rest_required_fields( + request_type=compute.SetServiceAccountInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} @@ -7541,7 +18741,7 @@ def test_reset_unary_rest_required_fields(request_type=compute.ResetInstanceRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).reset._get_unset_required_fields(jsonified_request) + ).set_service_account._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -7552,7 +18752,7 @@ def test_reset_unary_rest_required_fields(request_type=compute.ResetInstanceRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).reset._get_unset_required_fields(jsonified_request) + ).set_service_account._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -7586,6 +18786,7 @@ def test_reset_unary_rest_required_fields(request_type=compute.ResetInstanceRequ "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -7594,24 +18795,25 @@ def test_reset_unary_rest_required_fields(request_type=compute.ResetInstanceRequ response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.reset_unary(request) + response = client.set_service_account_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_reset_unary_rest_unset_required_fields(): +def test_set_service_account_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.reset._get_unset_required_fields({}) + unset_fields = transport.set_service_account._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", + "instancesSetServiceAccountRequestResource", "project", "zone", ) @@ -7620,7 +18822,7 @@ def test_reset_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_reset_unary_rest_interceptors(null_interceptor): +def test_set_service_account_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -7631,9 +18833,9 @@ def test_reset_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_reset" + transports.InstancesRestInterceptor, "post_set_service_account" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_reset" + transports.InstancesRestInterceptor, "pre_set_service_account" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -7650,7 +18852,7 @@ def test_reset_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ResetInstanceRequest() + request = compute.SetServiceAccountInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -7658,7 +18860,7 @@ def test_reset_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.reset_unary( + client.set_service_account_unary( request, metadata=[ ("key", "val"), @@ -7670,8 +18872,8 @@ def test_reset_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_reset_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ResetInstanceRequest +def test_set_service_account_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetServiceAccountInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7680,6 +18882,10 @@ def test_reset_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instances_set_service_account_request_resource"] = { + "email": "email_value", + "scopes": ["scopes_value_1", "scopes_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -7691,10 +18897,10 @@ def test_reset_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.reset_unary(request) + client.set_service_account_unary(request) -def test_reset_unary_rest_flattened(): +def test_set_service_account_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7717,6 +18923,9 @@ def test_reset_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + instances_set_service_account_request_resource=compute.InstancesSetServiceAccountRequest( + email="email_value" + ), ) mock_args.update(sample_request) @@ -7728,20 +18937,20 @@ def test_reset_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.reset_unary(**mock_args) + client.set_service_account_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/reset" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setServiceAccount" % client.transport._host, args[1], ) -def test_reset_unary_rest_flattened_error(transport: str = "rest"): +def test_set_service_account_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7750,15 +18959,18 @@ def test_reset_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.reset_unary( - compute.ResetInstanceRequest(), + client.set_service_account_unary( + compute.SetServiceAccountInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + instances_set_service_account_request_resource=compute.InstancesSetServiceAccountRequest( + email="email_value" + ), ) -def test_reset_unary_rest_error(): +def test_set_service_account_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -7767,11 +18979,11 @@ def test_reset_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ResumeInstanceRequest, + compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict, ], ) -def test_resume_unary_rest(request_type): +def test_set_shielded_instance_integrity_policy_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7779,6 +18991,9 @@ def test_resume_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["shielded_instance_integrity_policy_resource"] = { + "update_auto_learn_policy": True + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -7815,10 +19030,10 @@ def test_resume_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resume_unary(request) + response = client.set_shielded_instance_integrity_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -7843,7 +19058,9 @@ def test_resume_unary_rest(request_type): assert response.zone == "zone_value" -def test_resume_unary_rest_required_fields(request_type=compute.ResumeInstanceRequest): +def test_set_shielded_instance_integrity_policy_rest_required_fields( + request_type=compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} @@ -7861,7 +19078,9 @@ def test_resume_unary_rest_required_fields(request_type=compute.ResumeInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resume._get_unset_required_fields(jsonified_request) + ).set_shielded_instance_integrity_policy._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -7872,7 +19091,9 @@ def test_resume_unary_rest_required_fields(request_type=compute.ResumeInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resume._get_unset_required_fields(jsonified_request) + ).set_shielded_instance_integrity_policy._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -7903,9 +19124,10 @@ def test_resume_unary_rest_required_fields(request_type=compute.ResumeInstanceRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -7914,25 +19136,28 @@ def test_resume_unary_rest_required_fields(request_type=compute.ResumeInstanceRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resume_unary(request) + response = client.set_shielded_instance_integrity_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_resume_unary_rest_unset_required_fields(): +def test_set_shielded_instance_integrity_policy_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.resume._get_unset_required_fields({}) + unset_fields = ( + transport.set_shielded_instance_integrity_policy._get_unset_required_fields({}) + ) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", "project", + "shieldedInstanceIntegrityPolicyResource", "zone", ) ) @@ -7940,7 +19165,7 @@ def test_resume_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_resume_unary_rest_interceptors(null_interceptor): +def test_set_shielded_instance_integrity_policy_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -7951,9 +19176,11 @@ def test_resume_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_resume" + transports.InstancesRestInterceptor, + "post_set_shielded_instance_integrity_policy", ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_resume" + transports.InstancesRestInterceptor, + "pre_set_shielded_instance_integrity_policy", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -7970,7 +19197,7 @@ def test_resume_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ResumeInstanceRequest() + request = compute.SetShieldedInstanceIntegrityPolicyInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -7978,7 +19205,7 @@ def test_resume_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.resume_unary( + client.set_shielded_instance_integrity_policy( request, metadata=[ ("key", "val"), @@ -7990,8 +19217,9 @@ def test_resume_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_resume_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ResumeInstanceRequest +def test_set_shielded_instance_integrity_policy_rest_bad_request( + transport: str = "rest", + request_type=compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8000,6 +19228,9 @@ def test_resume_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["shielded_instance_integrity_policy_resource"] = { + "update_auto_learn_policy": True + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8011,10 +19242,10 @@ def test_resume_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.resume_unary(request) + client.set_shielded_instance_integrity_policy(request) -def test_resume_unary_rest_flattened(): +def test_set_shielded_instance_integrity_policy_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -8037,6 +19268,9 @@ def test_resume_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + shielded_instance_integrity_policy_resource=compute.ShieldedInstanceIntegrityPolicy( + update_auto_learn_policy=True + ), ) mock_args.update(sample_request) @@ -8048,20 +19282,22 @@ def test_resume_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.resume_unary(**mock_args) + client.set_shielded_instance_integrity_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/resume" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setShieldedInstanceIntegrityPolicy" % client.transport._host, args[1], ) -def test_resume_unary_rest_flattened_error(transport: str = "rest"): +def test_set_shielded_instance_integrity_policy_rest_flattened_error( + transport: str = "rest", +): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8070,15 +19306,18 @@ def test_resume_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.resume_unary( - compute.ResumeInstanceRequest(), + client.set_shielded_instance_integrity_policy( + compute.SetShieldedInstanceIntegrityPolicyInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + shielded_instance_integrity_policy_resource=compute.ShieldedInstanceIntegrityPolicy( + update_auto_learn_policy=True + ), ) -def test_resume_unary_rest_error(): +def test_set_shielded_instance_integrity_policy_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -8087,11 +19326,11 @@ def test_resume_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SendDiagnosticInterruptInstanceRequest, + compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, dict, ], ) -def test_send_diagnostic_interrupt_rest(request_type): +def test_set_shielded_instance_integrity_policy_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -8099,29 +19338,53 @@ def test_send_diagnostic_interrupt_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["shielded_instance_integrity_policy_resource"] = { + "update_auto_learn_policy": True + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SendDiagnosticInterruptInstanceResponse() + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SendDiagnosticInterruptInstanceResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.send_diagnostic_interrupt(request) + response = client.set_shielded_instance_integrity_policy_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SendDiagnosticInterruptInstanceResponse) + assert isinstance(response, compute.Operation) -def test_send_diagnostic_interrupt_rest_required_fields( - request_type=compute.SendDiagnosticInterruptInstanceRequest, +def test_set_shielded_instance_integrity_policy_unary_rest_required_fields( + request_type=compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -8140,7 +19403,9 @@ def test_send_diagnostic_interrupt_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).send_diagnostic_interrupt._get_unset_required_fields(jsonified_request) + ).set_shielded_instance_integrity_policy._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -8151,7 +19416,11 @@ def test_send_diagnostic_interrupt_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).send_diagnostic_interrupt._get_unset_required_fields(jsonified_request) + ).set_shielded_instance_integrity_policy._get_unset_required_fields( + jsonified_request + ) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -8169,7 +19438,7 @@ def test_send_diagnostic_interrupt_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SendDiagnosticInterruptInstanceResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -8180,38 +19449,40 @@ def test_send_diagnostic_interrupt_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SendDiagnosticInterruptInstanceResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.send_diagnostic_interrupt(request) + response = client.set_shielded_instance_integrity_policy_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_send_diagnostic_interrupt_rest_unset_required_fields(): +def test_set_shielded_instance_integrity_policy_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.send_diagnostic_interrupt._get_unset_required_fields({}) + unset_fields = ( + transport.set_shielded_instance_integrity_policy._get_unset_required_fields({}) + ) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instance", "project", + "shieldedInstanceIntegrityPolicyResource", "zone", ) ) @@ -8219,7 +19490,9 @@ def test_send_diagnostic_interrupt_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_send_diagnostic_interrupt_rest_interceptors(null_interceptor): +def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( + null_interceptor, +): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -8230,9 +19503,11 @@ def test_send_diagnostic_interrupt_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_send_diagnostic_interrupt" + transports.InstancesRestInterceptor, + "post_set_shielded_instance_integrity_policy", ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_send_diagnostic_interrupt" + transports.InstancesRestInterceptor, + "pre_set_shielded_instance_integrity_policy", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -8247,21 +19522,17 @@ def test_send_diagnostic_interrupt_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.SendDiagnosticInterruptInstanceResponse.to_json( - compute.SendDiagnosticInterruptInstanceResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SendDiagnosticInterruptInstanceRequest() + request = compute.SetShieldedInstanceIntegrityPolicyInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SendDiagnosticInterruptInstanceResponse + post.return_value = compute.Operation - client.send_diagnostic_interrupt( + client.set_shielded_instance_integrity_policy_unary( request, metadata=[ ("key", "val"), @@ -8273,8 +19544,9 @@ def test_send_diagnostic_interrupt_rest_interceptors(null_interceptor): post.assert_called_once() -def test_send_diagnostic_interrupt_rest_bad_request( - transport: str = "rest", request_type=compute.SendDiagnosticInterruptInstanceRequest +def test_set_shielded_instance_integrity_policy_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8283,6 +19555,9 @@ def test_send_diagnostic_interrupt_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["shielded_instance_integrity_policy_resource"] = { + "update_auto_learn_policy": True + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8294,10 +19569,10 @@ def test_send_diagnostic_interrupt_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.send_diagnostic_interrupt(request) + client.set_shielded_instance_integrity_policy_unary(request) -def test_send_diagnostic_interrupt_rest_flattened(): +def test_set_shielded_instance_integrity_policy_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -8306,7 +19581,7 @@ def test_send_diagnostic_interrupt_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SendDiagnosticInterruptInstanceResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -8320,33 +19595,36 @@ def test_send_diagnostic_interrupt_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + shielded_instance_integrity_policy_resource=compute.ShieldedInstanceIntegrityPolicy( + update_auto_learn_policy=True + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SendDiagnosticInterruptInstanceResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.send_diagnostic_interrupt(**mock_args) + client.set_shielded_instance_integrity_policy_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/sendDiagnosticInterrupt" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setShieldedInstanceIntegrityPolicy" % client.transport._host, args[1], ) -def test_send_diagnostic_interrupt_rest_flattened_error(transport: str = "rest"): +def test_set_shielded_instance_integrity_policy_unary_rest_flattened_error( + transport: str = "rest", +): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8355,15 +19633,18 @@ def test_send_diagnostic_interrupt_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.send_diagnostic_interrupt( - compute.SendDiagnosticInterruptInstanceRequest(), + client.set_shielded_instance_integrity_policy_unary( + compute.SetShieldedInstanceIntegrityPolicyInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + shielded_instance_integrity_policy_resource=compute.ShieldedInstanceIntegrityPolicy( + update_auto_learn_policy=True + ), ) -def test_send_diagnostic_interrupt_rest_error(): +def test_set_shielded_instance_integrity_policy_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -8372,18 +19653,22 @@ def test_send_diagnostic_interrupt_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetDeletionProtectionInstanceRequest, + compute.SetTagsInstanceRequest, dict, ], ) -def test_set_deletion_protection_unary_rest(request_type): +def test_set_tags_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["tags_resource"] = { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -8420,10 +19705,10 @@ def test_set_deletion_protection_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_deletion_protection_unary(request) + response = client.set_tags(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -8448,14 +19733,12 @@ def test_set_deletion_protection_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_deletion_protection_unary_rest_required_fields( - request_type=compute.SetDeletionProtectionInstanceRequest, -): +def test_set_tags_rest_required_fields(request_type=compute.SetTagsInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} + request_init["instance"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -8468,32 +19751,27 @@ def test_set_deletion_protection_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_deletion_protection._get_unset_required_fields(jsonified_request) + ).set_tags._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_deletion_protection._get_unset_required_fields(jsonified_request) + ).set_tags._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "deletion_protection", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -8518,6 +19796,7 @@ def test_set_deletion_protection_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -8526,30 +19805,26 @@ def test_set_deletion_protection_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_deletion_protection_unary(request) + response = client.set_tags(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_deletion_protection_unary_rest_unset_required_fields(): +def test_set_tags_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_deletion_protection._get_unset_required_fields({}) + unset_fields = transport.set_tags._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "deletionProtection", - "requestId", - ) - ) + set(("requestId",)) & set( ( + "instance", "project", - "resource", + "tagsResource", "zone", ) ) @@ -8557,7 +19832,7 @@ def test_set_deletion_protection_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): +def test_set_tags_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -8568,9 +19843,9 @@ def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_deletion_protection" + transports.InstancesRestInterceptor, "post_set_tags" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_deletion_protection" + transports.InstancesRestInterceptor, "pre_set_tags" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -8587,7 +19862,7 @@ def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetDeletionProtectionInstanceRequest() + request = compute.SetTagsInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -8595,7 +19870,7 @@ def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_deletion_protection_unary( + client.set_tags( request, metadata=[ ("key", "val"), @@ -8607,8 +19882,8 @@ def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_deletion_protection_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetDeletionProtectionInstanceRequest +def test_set_tags_rest_bad_request( + transport: str = "rest", request_type=compute.SetTagsInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8616,7 +19891,11 @@ def test_set_deletion_protection_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["tags_resource"] = { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8628,10 +19907,10 @@ def test_set_deletion_protection_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_deletion_protection_unary(request) + client.set_tags(request) -def test_set_deletion_protection_unary_rest_flattened(): +def test_set_tags_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -8646,14 +19925,15 @@ def test_set_deletion_protection_unary_rest_flattened(): sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "instance": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", + instance="instance_value", + tags_resource=compute.Tags(fingerprint="fingerprint_value"), ) mock_args.update(sample_request) @@ -8665,20 +19945,20 @@ def test_set_deletion_protection_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_deletion_protection_unary(**mock_args) + client.set_tags(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/setDeletionProtection" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setTags" % client.transport._host, args[1], ) -def test_set_deletion_protection_unary_rest_flattened_error(transport: str = "rest"): +def test_set_tags_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8687,15 +19967,16 @@ def test_set_deletion_protection_unary_rest_flattened_error(transport: str = "re # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_deletion_protection_unary( - compute.SetDeletionProtectionInstanceRequest(), + client.set_tags( + compute.SetTagsInstanceRequest(), project="project_value", zone="zone_value", - resource="resource_value", + instance="instance_value", + tags_resource=compute.Tags(fingerprint="fingerprint_value"), ) -def test_set_deletion_protection_unary_rest_error(): +def test_set_tags_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -8704,11 +19985,11 @@ def test_set_deletion_protection_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetDiskAutoDeleteInstanceRequest, + compute.SetTagsInstanceRequest, dict, ], ) -def test_set_disk_auto_delete_unary_rest(request_type): +def test_set_tags_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -8716,6 +19997,10 @@ def test_set_disk_auto_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["tags_resource"] = { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -8752,42 +20037,18 @@ def test_set_disk_auto_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_disk_auto_delete_unary(request) + response = client.set_tags_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_disk_auto_delete_unary_rest_required_fields( - request_type=compute.SetDiskAutoDeleteInstanceRequest, +def test_set_tags_unary_rest_required_fields( + request_type=compute.SetTagsInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} - request_init["auto_delete"] = False - request_init["device_name"] = "" request_init["instance"] = "" request_init["project"] = "" request_init["zone"] = "" @@ -8799,44 +20060,26 @@ def test_set_disk_auto_delete_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "autoDelete" not in jsonified_request - assert "deviceName" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_disk_auto_delete._get_unset_required_fields(jsonified_request) + ).set_tags._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "autoDelete" in jsonified_request - assert jsonified_request["autoDelete"] == request_init["auto_delete"] - assert "deviceName" in jsonified_request - assert jsonified_request["deviceName"] == request_init["device_name"] - jsonified_request["autoDelete"] = True - jsonified_request["deviceName"] = "device_name_value" jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_disk_auto_delete._get_unset_required_fields(jsonified_request) + ).set_tags._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "auto_delete", - "device_name", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "autoDelete" in jsonified_request - assert jsonified_request["autoDelete"] == True - assert "deviceName" in jsonified_request - assert jsonified_request["deviceName"] == "device_name_value" assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request @@ -8865,6 +20108,7 @@ def test_set_disk_auto_delete_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -8873,42 +20117,26 @@ def test_set_disk_auto_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_disk_auto_delete_unary(request) + response = client.set_tags_unary(request) - expected_params = [ - ( - "autoDelete", - False, - ), - ( - "deviceName", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_disk_auto_delete_unary_rest_unset_required_fields(): +def test_set_tags_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_disk_auto_delete._get_unset_required_fields({}) + unset_fields = transport.set_tags._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "autoDelete", - "deviceName", - "requestId", - ) - ) + set(("requestId",)) & set( ( - "autoDelete", - "deviceName", "instance", "project", + "tagsResource", "zone", ) ) @@ -8916,7 +20144,7 @@ def test_set_disk_auto_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): +def test_set_tags_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -8927,9 +20155,9 @@ def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_disk_auto_delete" + transports.InstancesRestInterceptor, "post_set_tags" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_disk_auto_delete" + transports.InstancesRestInterceptor, "pre_set_tags" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -8946,7 +20174,7 @@ def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetDiskAutoDeleteInstanceRequest() + request = compute.SetTagsInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -8954,7 +20182,7 @@ def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_disk_auto_delete_unary( + client.set_tags_unary( request, metadata=[ ("key", "val"), @@ -8966,8 +20194,8 @@ def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_disk_auto_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetDiskAutoDeleteInstanceRequest +def test_set_tags_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetTagsInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8976,6 +20204,10 @@ def test_set_disk_auto_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["tags_resource"] = { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8987,10 +20219,10 @@ def test_set_disk_auto_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_disk_auto_delete_unary(request) + client.set_tags_unary(request) -def test_set_disk_auto_delete_unary_rest_flattened(): +def test_set_tags_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -9013,8 +20245,7 @@ def test_set_disk_auto_delete_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - auto_delete=True, - device_name="device_name_value", + tags_resource=compute.Tags(fingerprint="fingerprint_value"), ) mock_args.update(sample_request) @@ -9026,20 +20257,20 @@ def test_set_disk_auto_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_disk_auto_delete_unary(**mock_args) + client.set_tags_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setTags" % client.transport._host, args[1], ) -def test_set_disk_auto_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_set_tags_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9048,17 +20279,16 @@ def test_set_disk_auto_delete_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_disk_auto_delete_unary( - compute.SetDiskAutoDeleteInstanceRequest(), + client.set_tags_unary( + compute.SetTagsInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - auto_delete=True, - device_name="device_name_value", + tags_resource=compute.Tags(fingerprint="fingerprint_value"), ) -def test_set_disk_auto_delete_unary_rest_error(): +def test_set_tags_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -9067,129 +20297,90 @@ def test_set_disk_auto_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicyInstanceRequest, + compute.SimulateMaintenanceEventInstanceRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_simulate_maintenance_event_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, - } + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.simulate_maintenance_event(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicyInstanceRequest, +def test_simulate_maintenance_event_rest_required_fields( + request_type=compute.SimulateMaintenanceEventInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["instance"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -9202,25 +20393,25 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).simulate_maintenance_event._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).simulate_maintenance_event._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -9231,7 +20422,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -9245,43 +20436,41 @@ def test_set_iam_policy_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.simulate_maintenance_event(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_simulate_maintenance_event_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.simulate_maintenance_event._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( + "instance", "project", - "resource", "zone", - "zoneSetPolicyRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_simulate_maintenance_event_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -9292,9 +20481,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_iam_policy" + transports.InstancesRestInterceptor, "post_simulate_maintenance_event" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_iam_policy" + transports.InstancesRestInterceptor, "pre_simulate_maintenance_event" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -9309,17 +20498,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicyInstanceRequest() + request = compute.SimulateMaintenanceEventInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.simulate_maintenance_event( request, metadata=[ ("key", "val"), @@ -9331,8 +20520,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicyInstanceRequest +def test_simulate_maintenance_event_rest_bad_request( + transport: str = "rest", + request_type=compute.SimulateMaintenanceEventInstanceRequest, ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9340,84 +20530,7 @@ def test_set_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, - } + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9429,10 +20542,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.simulate_maintenance_event(request) -def test_set_iam_policy_rest_flattened(): +def test_simulate_maintenance_event_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -9441,48 +20554,45 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "instance": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] - ), + instance="instance_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.simulate_maintenance_event(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/simulateMaintenanceEvent" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_simulate_maintenance_event_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9491,18 +20601,15 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicyInstanceRequest(), + client.simulate_maintenance_event( + compute.SimulateMaintenanceEventInstanceRequest(), project="project_value", zone="zone_value", - resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] - ), + instance="instance_value", ) -def test_set_iam_policy_rest_error(): +def test_simulate_maintenance_event_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -9511,11 +20618,11 @@ def test_set_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetLabelsInstanceRequest, + compute.SimulateMaintenanceEventInstanceRequest, dict, ], ) -def test_set_labels_unary_rest(request_type): +def test_simulate_maintenance_event_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -9523,10 +20630,6 @@ def test_set_labels_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_labels_request_resource"] = { - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -9563,36 +20666,14 @@ def test_set_labels_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_labels_unary(request) + response = client.simulate_maintenance_event_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_labels_unary_rest_required_fields( - request_type=compute.SetLabelsInstanceRequest, +def test_simulate_maintenance_event_unary_rest_required_fields( + request_type=compute.SimulateMaintenanceEventInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -9611,7 +20692,7 @@ def test_set_labels_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_labels._get_unset_required_fields(jsonified_request) + ).simulate_maintenance_event._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -9622,9 +20703,7 @@ def test_set_labels_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_labels._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).simulate_maintenance_event._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -9656,7 +20735,6 @@ def test_set_labels_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -9665,25 +20743,24 @@ def test_set_labels_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_labels_unary(request) + response = client.simulate_maintenance_event_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_labels_unary_rest_unset_required_fields(): +def test_simulate_maintenance_event_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_labels._get_unset_required_fields({}) + unset_fields = transport.simulate_maintenance_event._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instance", - "instancesSetLabelsRequestResource", "project", "zone", ) @@ -9692,7 +20769,7 @@ def test_set_labels_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_labels_unary_rest_interceptors(null_interceptor): +def test_simulate_maintenance_event_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -9703,9 +20780,9 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_labels" + transports.InstancesRestInterceptor, "post_simulate_maintenance_event" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_labels" + transports.InstancesRestInterceptor, "pre_simulate_maintenance_event" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -9722,7 +20799,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetLabelsInstanceRequest() + request = compute.SimulateMaintenanceEventInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -9730,7 +20807,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_labels_unary( + client.simulate_maintenance_event_unary( request, metadata=[ ("key", "val"), @@ -9742,8 +20819,9 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_labels_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetLabelsInstanceRequest +def test_simulate_maintenance_event_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SimulateMaintenanceEventInstanceRequest, ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9752,10 +20830,6 @@ def test_set_labels_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_labels_request_resource"] = { - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9767,10 +20841,10 @@ def test_set_labels_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_labels_unary(request) + client.simulate_maintenance_event_unary(request) -def test_set_labels_unary_rest_flattened(): +def test_simulate_maintenance_event_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -9793,9 +20867,6 @@ def test_set_labels_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_set_labels_request_resource=compute.InstancesSetLabelsRequest( - label_fingerprint="label_fingerprint_value" - ), ) mock_args.update(sample_request) @@ -9807,20 +20878,20 @@ def test_set_labels_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_labels_unary(**mock_args) + client.simulate_maintenance_event_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setLabels" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/simulateMaintenanceEvent" % client.transport._host, args[1], ) -def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): +def test_simulate_maintenance_event_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9829,18 +20900,15 @@ def test_set_labels_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_labels_unary( - compute.SetLabelsInstanceRequest(), + client.simulate_maintenance_event_unary( + compute.SimulateMaintenanceEventInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_set_labels_request_resource=compute.InstancesSetLabelsRequest( - label_fingerprint="label_fingerprint_value" - ), ) -def test_set_labels_unary_rest_error(): +def test_simulate_maintenance_event_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -9849,11 +20917,11 @@ def test_set_labels_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetMachineResourcesInstanceRequest, + compute.StartInstanceRequest, dict, ], ) -def test_set_machine_resources_unary_rest(request_type): +def test_start_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -9861,11 +20929,6 @@ def test_set_machine_resources_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_machine_resources_request_resource"] = { - "guest_accelerators": [ - {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} - ] - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -9902,10 +20965,10 @@ def test_set_machine_resources_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_machine_resources_unary(request) + response = client.start(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -9930,9 +20993,7 @@ def test_set_machine_resources_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_machine_resources_unary_rest_required_fields( - request_type=compute.SetMachineResourcesInstanceRequest, -): +def test_start_rest_required_fields(request_type=compute.StartInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -9950,7 +21011,7 @@ def test_set_machine_resources_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_machine_resources._get_unset_required_fields(jsonified_request) + ).start._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -9961,7 +21022,7 @@ def test_set_machine_resources_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_machine_resources._get_unset_required_fields(jsonified_request) + ).start._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -9995,7 +21056,6 @@ def test_set_machine_resources_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -10004,25 +21064,24 @@ def test_set_machine_resources_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_machine_resources_unary(request) + response = client.start(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_machine_resources_unary_rest_unset_required_fields(): +def test_start_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_machine_resources._get_unset_required_fields({}) + unset_fields = transport.start._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", - "instancesSetMachineResourcesRequestResource", "project", "zone", ) @@ -10031,7 +21090,7 @@ def test_set_machine_resources_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_machine_resources_unary_rest_interceptors(null_interceptor): +def test_start_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -10042,9 +21101,9 @@ def test_set_machine_resources_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_machine_resources" + transports.InstancesRestInterceptor, "post_start" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_machine_resources" + transports.InstancesRestInterceptor, "pre_start" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -10061,7 +21120,7 @@ def test_set_machine_resources_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetMachineResourcesInstanceRequest() + request = compute.StartInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -10069,7 +21128,7 @@ def test_set_machine_resources_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_machine_resources_unary( + client.start( request, metadata=[ ("key", "val"), @@ -10081,8 +21140,8 @@ def test_set_machine_resources_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_machine_resources_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetMachineResourcesInstanceRequest +def test_start_rest_bad_request( + transport: str = "rest", request_type=compute.StartInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10091,11 +21150,6 @@ def test_set_machine_resources_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_machine_resources_request_resource"] = { - "guest_accelerators": [ - {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} - ] - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -10107,10 +21161,10 @@ def test_set_machine_resources_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_machine_resources_unary(request) + client.start(request) -def test_set_machine_resources_unary_rest_flattened(): +def test_start_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -10133,9 +21187,6 @@ def test_set_machine_resources_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_set_machine_resources_request_resource=compute.InstancesSetMachineResourcesRequest( - guest_accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] - ), ) mock_args.update(sample_request) @@ -10147,20 +21198,20 @@ def test_set_machine_resources_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_machine_resources_unary(**mock_args) + client.start(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineResources" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/start" % client.transport._host, args[1], ) -def test_set_machine_resources_unary_rest_flattened_error(transport: str = "rest"): +def test_start_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10169,18 +21220,15 @@ def test_set_machine_resources_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_machine_resources_unary( - compute.SetMachineResourcesInstanceRequest(), + client.start( + compute.StartInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_set_machine_resources_request_resource=compute.InstancesSetMachineResourcesRequest( - guest_accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] - ), ) -def test_set_machine_resources_unary_rest_error(): +def test_start_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -10189,11 +21237,11 @@ def test_set_machine_resources_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetMachineTypeInstanceRequest, + compute.StartInstanceRequest, dict, ], ) -def test_set_machine_type_unary_rest(request_type): +def test_start_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -10201,9 +21249,6 @@ def test_set_machine_type_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_machine_type_request_resource"] = { - "machine_type": "machine_type_value" - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -10240,37 +21285,13 @@ def test_set_machine_type_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_machine_type_unary(request) + response = client.start_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_machine_type_unary_rest_required_fields( - request_type=compute.SetMachineTypeInstanceRequest, -): +def test_start_unary_rest_required_fields(request_type=compute.StartInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -10288,7 +21309,7 @@ def test_set_machine_type_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_machine_type._get_unset_required_fields(jsonified_request) + ).start._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -10299,7 +21320,7 @@ def test_set_machine_type_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_machine_type._get_unset_required_fields(jsonified_request) + ).start._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -10333,7 +21354,6 @@ def test_set_machine_type_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -10342,25 +21362,24 @@ def test_set_machine_type_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_machine_type_unary(request) + response = client.start_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_machine_type_unary_rest_unset_required_fields(): +def test_start_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_machine_type._get_unset_required_fields({}) + unset_fields = transport.start._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", - "instancesSetMachineTypeRequestResource", "project", "zone", ) @@ -10369,7 +21388,7 @@ def test_set_machine_type_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_machine_type_unary_rest_interceptors(null_interceptor): +def test_start_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -10380,9 +21399,9 @@ def test_set_machine_type_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_machine_type" + transports.InstancesRestInterceptor, "post_start" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_machine_type" + transports.InstancesRestInterceptor, "pre_start" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -10399,7 +21418,7 @@ def test_set_machine_type_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetMachineTypeInstanceRequest() + request = compute.StartInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -10407,7 +21426,7 @@ def test_set_machine_type_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_machine_type_unary( + client.start_unary( request, metadata=[ ("key", "val"), @@ -10419,8 +21438,8 @@ def test_set_machine_type_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_machine_type_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetMachineTypeInstanceRequest +def test_start_unary_rest_bad_request( + transport: str = "rest", request_type=compute.StartInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10429,9 +21448,6 @@ def test_set_machine_type_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_machine_type_request_resource"] = { - "machine_type": "machine_type_value" - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -10443,10 +21459,10 @@ def test_set_machine_type_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_machine_type_unary(request) + client.start_unary(request) -def test_set_machine_type_unary_rest_flattened(): +def test_start_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -10469,9 +21485,6 @@ def test_set_machine_type_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_set_machine_type_request_resource=compute.InstancesSetMachineTypeRequest( - machine_type="machine_type_value" - ), ) mock_args.update(sample_request) @@ -10483,20 +21496,20 @@ def test_set_machine_type_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_machine_type_unary(**mock_args) + client.start_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMachineType" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/start" % client.transport._host, args[1], ) -def test_set_machine_type_unary_rest_flattened_error(transport: str = "rest"): +def test_start_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10505,18 +21518,15 @@ def test_set_machine_type_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_machine_type_unary( - compute.SetMachineTypeInstanceRequest(), + client.start_unary( + compute.StartInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_set_machine_type_request_resource=compute.InstancesSetMachineTypeRequest( - machine_type="machine_type_value" - ), ) -def test_set_machine_type_unary_rest_error(): +def test_start_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -10525,11 +21535,11 @@ def test_set_machine_type_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetMetadataInstanceRequest, + compute.StartWithEncryptionKeyInstanceRequest, dict, ], ) -def test_set_metadata_unary_rest(request_type): +def test_start_with_encryption_key_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -10537,10 +21547,19 @@ def test_set_metadata_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["metadata_resource"] = { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", + request_init["instances_start_with_encryption_key_request_resource"] = { + "disks": [ + { + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source": "source_value", + } + ] } request = request_type(request_init) @@ -10578,10 +21597,10 @@ def test_set_metadata_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_metadata_unary(request) + response = client.start_with_encryption_key(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -10606,8 +21625,8 @@ def test_set_metadata_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_metadata_unary_rest_required_fields( - request_type=compute.SetMetadataInstanceRequest, +def test_start_with_encryption_key_rest_required_fields( + request_type=compute.StartWithEncryptionKeyInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -10626,7 +21645,7 @@ def test_set_metadata_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_metadata._get_unset_required_fields(jsonified_request) + ).start_with_encryption_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -10637,7 +21656,7 @@ def test_set_metadata_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_metadata._get_unset_required_fields(jsonified_request) + ).start_with_encryption_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -10680,25 +21699,25 @@ def test_set_metadata_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_metadata_unary(request) + response = client.start_with_encryption_key(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_metadata_unary_rest_unset_required_fields(): +def test_start_with_encryption_key_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_metadata._get_unset_required_fields({}) + unset_fields = transport.start_with_encryption_key._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", - "metadataResource", + "instancesStartWithEncryptionKeyRequestResource", "project", "zone", ) @@ -10707,7 +21726,7 @@ def test_set_metadata_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_metadata_unary_rest_interceptors(null_interceptor): +def test_start_with_encryption_key_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -10718,9 +21737,9 @@ def test_set_metadata_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_metadata" + transports.InstancesRestInterceptor, "post_start_with_encryption_key" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_metadata" + transports.InstancesRestInterceptor, "pre_start_with_encryption_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -10737,7 +21756,7 @@ def test_set_metadata_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetMetadataInstanceRequest() + request = compute.StartWithEncryptionKeyInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -10745,7 +21764,7 @@ def test_set_metadata_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_metadata_unary( + client.start_with_encryption_key( request, metadata=[ ("key", "val"), @@ -10757,8 +21776,8 @@ def test_set_metadata_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_metadata_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetMetadataInstanceRequest +def test_start_with_encryption_key_rest_bad_request( + transport: str = "rest", request_type=compute.StartWithEncryptionKeyInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10767,10 +21786,19 @@ def test_set_metadata_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["metadata_resource"] = { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", + request_init["instances_start_with_encryption_key_request_resource"] = { + "disks": [ + { + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source": "source_value", + } + ] } request = request_type(request_init) @@ -10783,10 +21811,10 @@ def test_set_metadata_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_metadata_unary(request) + client.start_with_encryption_key(request) -def test_set_metadata_unary_rest_flattened(): +def test_start_with_encryption_key_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -10809,7 +21837,15 @@ def test_set_metadata_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + instances_start_with_encryption_key_request_resource=compute.InstancesStartWithEncryptionKeyRequest( + disks=[ + compute.CustomerEncryptionKeyProtectedDisk( + disk_encryption_key=compute.CustomerEncryptionKey( + kms_key_name="kms_key_name_value" + ) + ) + ] + ), ) mock_args.update(sample_request) @@ -10821,20 +21857,20 @@ def test_set_metadata_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_metadata_unary(**mock_args) + client.start_with_encryption_key(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMetadata" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/startWithEncryptionKey" % client.transport._host, args[1], ) -def test_set_metadata_unary_rest_flattened_error(transport: str = "rest"): +def test_start_with_encryption_key_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10843,16 +21879,24 @@ def test_set_metadata_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_metadata_unary( - compute.SetMetadataInstanceRequest(), + client.start_with_encryption_key( + compute.StartWithEncryptionKeyInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + instances_start_with_encryption_key_request_resource=compute.InstancesStartWithEncryptionKeyRequest( + disks=[ + compute.CustomerEncryptionKeyProtectedDisk( + disk_encryption_key=compute.CustomerEncryptionKey( + kms_key_name="kms_key_name_value" + ) + ) + ] + ), ) -def test_set_metadata_unary_rest_error(): +def test_start_with_encryption_key_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -10861,11 +21905,11 @@ def test_set_metadata_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetMinCpuPlatformInstanceRequest, + compute.StartWithEncryptionKeyInstanceRequest, dict, ], ) -def test_set_min_cpu_platform_unary_rest(request_type): +def test_start_with_encryption_key_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -10873,8 +21917,19 @@ def test_set_min_cpu_platform_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_min_cpu_platform_request_resource"] = { - "min_cpu_platform": "min_cpu_platform_value" + request_init["instances_start_with_encryption_key_request_resource"] = { + "disks": [ + { + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source": "source_value", + } + ] } request = request_type(request_init) @@ -10912,36 +21967,14 @@ def test_set_min_cpu_platform_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_min_cpu_platform_unary(request) + response = client.start_with_encryption_key_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_min_cpu_platform_unary_rest_required_fields( - request_type=compute.SetMinCpuPlatformInstanceRequest, +def test_start_with_encryption_key_unary_rest_required_fields( + request_type=compute.StartWithEncryptionKeyInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -10960,7 +21993,7 @@ def test_set_min_cpu_platform_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_min_cpu_platform._get_unset_required_fields(jsonified_request) + ).start_with_encryption_key._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -10971,7 +22004,7 @@ def test_set_min_cpu_platform_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_min_cpu_platform._get_unset_required_fields(jsonified_request) + ).start_with_encryption_key._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -11014,25 +22047,25 @@ def test_set_min_cpu_platform_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_min_cpu_platform_unary(request) + response = client.start_with_encryption_key_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_min_cpu_platform_unary_rest_unset_required_fields(): +def test_start_with_encryption_key_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_min_cpu_platform._get_unset_required_fields({}) + unset_fields = transport.start_with_encryption_key._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", - "instancesSetMinCpuPlatformRequestResource", + "instancesStartWithEncryptionKeyRequestResource", "project", "zone", ) @@ -11041,7 +22074,7 @@ def test_set_min_cpu_platform_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): +def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -11052,9 +22085,9 @@ def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_min_cpu_platform" + transports.InstancesRestInterceptor, "post_start_with_encryption_key" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_min_cpu_platform" + transports.InstancesRestInterceptor, "pre_start_with_encryption_key" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -11071,7 +22104,7 @@ def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetMinCpuPlatformInstanceRequest() + request = compute.StartWithEncryptionKeyInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -11079,7 +22112,7 @@ def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_min_cpu_platform_unary( + client.start_with_encryption_key_unary( request, metadata=[ ("key", "val"), @@ -11091,8 +22124,8 @@ def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_min_cpu_platform_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetMinCpuPlatformInstanceRequest +def test_start_with_encryption_key_unary_rest_bad_request( + transport: str = "rest", request_type=compute.StartWithEncryptionKeyInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -11101,8 +22134,19 @@ def test_set_min_cpu_platform_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_min_cpu_platform_request_resource"] = { - "min_cpu_platform": "min_cpu_platform_value" + request_init["instances_start_with_encryption_key_request_resource"] = { + "disks": [ + { + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source": "source_value", + } + ] } request = request_type(request_init) @@ -11115,10 +22159,10 @@ def test_set_min_cpu_platform_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_min_cpu_platform_unary(request) + client.start_with_encryption_key_unary(request) -def test_set_min_cpu_platform_unary_rest_flattened(): +def test_start_with_encryption_key_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -11141,8 +22185,14 @@ def test_set_min_cpu_platform_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_set_min_cpu_platform_request_resource=compute.InstancesSetMinCpuPlatformRequest( - min_cpu_platform="min_cpu_platform_value" + instances_start_with_encryption_key_request_resource=compute.InstancesStartWithEncryptionKeyRequest( + disks=[ + compute.CustomerEncryptionKeyProtectedDisk( + disk_encryption_key=compute.CustomerEncryptionKey( + kms_key_name="kms_key_name_value" + ) + ) + ] ), ) mock_args.update(sample_request) @@ -11155,20 +22205,20 @@ def test_set_min_cpu_platform_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_min_cpu_platform_unary(**mock_args) + client.start_with_encryption_key_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setMinCpuPlatform" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/startWithEncryptionKey" % client.transport._host, args[1], ) -def test_set_min_cpu_platform_unary_rest_flattened_error(transport: str = "rest"): +def test_start_with_encryption_key_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -11177,18 +22227,24 @@ def test_set_min_cpu_platform_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_min_cpu_platform_unary( - compute.SetMinCpuPlatformInstanceRequest(), + client.start_with_encryption_key_unary( + compute.StartWithEncryptionKeyInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_set_min_cpu_platform_request_resource=compute.InstancesSetMinCpuPlatformRequest( - min_cpu_platform="min_cpu_platform_value" + instances_start_with_encryption_key_request_resource=compute.InstancesStartWithEncryptionKeyRequest( + disks=[ + compute.CustomerEncryptionKeyProtectedDisk( + disk_encryption_key=compute.CustomerEncryptionKey( + kms_key_name="kms_key_name_value" + ) + ) + ] ), ) -def test_set_min_cpu_platform_unary_rest_error(): +def test_start_with_encryption_key_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -11197,11 +22253,11 @@ def test_set_min_cpu_platform_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetSchedulingInstanceRequest, + compute.StopInstanceRequest, dict, ], ) -def test_set_scheduling_unary_rest(request_type): +def test_stop_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -11209,22 +22265,6 @@ def test_set_scheduling_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["scheduling_resource"] = { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -11261,10 +22301,10 @@ def test_set_scheduling_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_scheduling_unary(request) + response = client.stop(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -11289,9 +22329,7 @@ def test_set_scheduling_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_scheduling_unary_rest_required_fields( - request_type=compute.SetSchedulingInstanceRequest, -): +def test_stop_rest_required_fields(request_type=compute.StopInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -11309,7 +22347,7 @@ def test_set_scheduling_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_scheduling._get_unset_required_fields(jsonified_request) + ).stop._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -11320,7 +22358,7 @@ def test_set_scheduling_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_scheduling._get_unset_required_fields(jsonified_request) + ).stop._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -11354,7 +22392,6 @@ def test_set_scheduling_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -11363,26 +22400,25 @@ def test_set_scheduling_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_scheduling_unary(request) + response = client.stop(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_scheduling_unary_rest_unset_required_fields(): +def test_stop_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_scheduling._get_unset_required_fields({}) + unset_fields = transport.stop._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", "project", - "schedulingResource", "zone", ) ) @@ -11390,7 +22426,7 @@ def test_set_scheduling_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_scheduling_unary_rest_interceptors(null_interceptor): +def test_stop_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -11401,9 +22437,9 @@ def test_set_scheduling_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_scheduling" + transports.InstancesRestInterceptor, "post_stop" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_scheduling" + transports.InstancesRestInterceptor, "pre_stop" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -11420,7 +22456,7 @@ def test_set_scheduling_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetSchedulingInstanceRequest() + request = compute.StopInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -11428,7 +22464,7 @@ def test_set_scheduling_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_scheduling_unary( + client.stop( request, metadata=[ ("key", "val"), @@ -11440,8 +22476,8 @@ def test_set_scheduling_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_scheduling_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetSchedulingInstanceRequest +def test_stop_rest_bad_request( + transport: str = "rest", request_type=compute.StopInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -11450,22 +22486,6 @@ def test_set_scheduling_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["scheduling_resource"] = { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -11477,10 +22497,10 @@ def test_set_scheduling_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_scheduling_unary(request) + client.stop(request) -def test_set_scheduling_unary_rest_flattened(): +def test_stop_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -11503,7 +22523,6 @@ def test_set_scheduling_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - scheduling_resource=compute.Scheduling(automatic_restart=True), ) mock_args.update(sample_request) @@ -11515,20 +22534,20 @@ def test_set_scheduling_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_scheduling_unary(**mock_args) + client.stop(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setScheduling" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/stop" % client.transport._host, args[1], ) -def test_set_scheduling_unary_rest_flattened_error(transport: str = "rest"): +def test_stop_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -11537,16 +22556,15 @@ def test_set_scheduling_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_scheduling_unary( - compute.SetSchedulingInstanceRequest(), + client.stop( + compute.StopInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - scheduling_resource=compute.Scheduling(automatic_restart=True), ) -def test_set_scheduling_unary_rest_error(): +def test_stop_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -11555,11 +22573,11 @@ def test_set_scheduling_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetServiceAccountInstanceRequest, + compute.StopInstanceRequest, dict, ], ) -def test_set_service_account_unary_rest(request_type): +def test_stop_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -11567,10 +22585,6 @@ def test_set_service_account_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_service_account_request_resource"] = { - "email": "email_value", - "scopes": ["scopes_value_1", "scopes_value_2"], - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -11597,47 +22611,23 @@ def test_set_service_account_unary_rest(request_type): status_message="status_message_value", target_id=947, target_link="target_link_value", - user="user_value", - zone="zone_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.set_service_account_unary(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.stop_unary(request) + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) -def test_set_service_account_unary_rest_required_fields( - request_type=compute.SetServiceAccountInstanceRequest, -): + +def test_stop_unary_rest_required_fields(request_type=compute.StopInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -11655,7 +22645,7 @@ def test_set_service_account_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_service_account._get_unset_required_fields(jsonified_request) + ).stop._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -11666,7 +22656,7 @@ def test_set_service_account_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_service_account._get_unset_required_fields(jsonified_request) + ).stop._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -11700,7 +22690,6 @@ def test_set_service_account_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -11709,25 +22698,24 @@ def test_set_service_account_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_service_account_unary(request) + response = client.stop_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_service_account_unary_rest_unset_required_fields(): +def test_stop_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_service_account._get_unset_required_fields({}) + unset_fields = transport.stop._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", - "instancesSetServiceAccountRequestResource", "project", "zone", ) @@ -11736,7 +22724,7 @@ def test_set_service_account_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_service_account_unary_rest_interceptors(null_interceptor): +def test_stop_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -11747,9 +22735,9 @@ def test_set_service_account_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_service_account" + transports.InstancesRestInterceptor, "post_stop" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_service_account" + transports.InstancesRestInterceptor, "pre_stop" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -11766,7 +22754,7 @@ def test_set_service_account_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetServiceAccountInstanceRequest() + request = compute.StopInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -11774,7 +22762,7 @@ def test_set_service_account_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_service_account_unary( + client.stop_unary( request, metadata=[ ("key", "val"), @@ -11786,8 +22774,8 @@ def test_set_service_account_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_service_account_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetServiceAccountInstanceRequest +def test_stop_unary_rest_bad_request( + transport: str = "rest", request_type=compute.StopInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -11796,10 +22784,6 @@ def test_set_service_account_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_set_service_account_request_resource"] = { - "email": "email_value", - "scopes": ["scopes_value_1", "scopes_value_2"], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -11811,10 +22795,10 @@ def test_set_service_account_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_service_account_unary(request) + client.stop_unary(request) -def test_set_service_account_unary_rest_flattened(): +def test_stop_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -11837,9 +22821,6 @@ def test_set_service_account_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_set_service_account_request_resource=compute.InstancesSetServiceAccountRequest( - email="email_value" - ), ) mock_args.update(sample_request) @@ -11851,20 +22832,20 @@ def test_set_service_account_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_service_account_unary(**mock_args) + client.stop_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setServiceAccount" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/stop" % client.transport._host, args[1], ) -def test_set_service_account_unary_rest_flattened_error(transport: str = "rest"): +def test_stop_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -11873,18 +22854,15 @@ def test_set_service_account_unary_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_service_account_unary( - compute.SetServiceAccountInstanceRequest(), + client.stop_unary( + compute.StopInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_set_service_account_request_resource=compute.InstancesSetServiceAccountRequest( - email="email_value" - ), ) -def test_set_service_account_unary_rest_error(): +def test_stop_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -11893,11 +22871,11 @@ def test_set_service_account_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, + compute.SuspendInstanceRequest, dict, ], ) -def test_set_shielded_instance_integrity_policy_unary_rest(request_type): +def test_suspend_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -11905,9 +22883,6 @@ def test_set_shielded_instance_integrity_policy_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["shielded_instance_integrity_policy_resource"] = { - "update_auto_learn_policy": True - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -11944,10 +22919,10 @@ def test_set_shielded_instance_integrity_policy_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_shielded_instance_integrity_policy_unary(request) + response = client.suspend(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -11972,9 +22947,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_shielded_instance_integrity_policy_unary_rest_required_fields( - request_type=compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, -): +def test_suspend_rest_required_fields(request_type=compute.SuspendInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -11992,9 +22965,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_shielded_instance_integrity_policy._get_unset_required_fields( - jsonified_request - ) + ).suspend._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -12005,9 +22976,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_shielded_instance_integrity_policy._get_unset_required_fields( - jsonified_request - ) + ).suspend._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -12038,10 +23007,9 @@ def test_set_shielded_instance_integrity_policy_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -12050,28 +23018,25 @@ def test_set_shielded_instance_integrity_policy_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_shielded_instance_integrity_policy_unary(request) + response = client.suspend(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_shielded_instance_integrity_policy_unary_rest_unset_required_fields(): +def test_suspend_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = ( - transport.set_shielded_instance_integrity_policy._get_unset_required_fields({}) - ) + unset_fields = transport.suspend._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", "project", - "shieldedInstanceIntegrityPolicyResource", "zone", ) ) @@ -12079,9 +23044,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest_unset_required_fields @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( - null_interceptor, -): +def test_suspend_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -12092,11 +23055,9 @@ def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, - "post_set_shielded_instance_integrity_policy", + transports.InstancesRestInterceptor, "post_suspend" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, - "pre_set_shielded_instance_integrity_policy", + transports.InstancesRestInterceptor, "pre_suspend" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -12113,7 +23074,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetShieldedInstanceIntegrityPolicyInstanceRequest() + request = compute.SuspendInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -12121,7 +23082,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( pre.return_value = request, metadata post.return_value = compute.Operation - client.set_shielded_instance_integrity_policy_unary( + client.suspend( request, metadata=[ ("key", "val"), @@ -12133,9 +23094,8 @@ def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( post.assert_called_once() -def test_set_shielded_instance_integrity_policy_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetShieldedInstanceIntegrityPolicyInstanceRequest, +def test_suspend_rest_bad_request( + transport: str = "rest", request_type=compute.SuspendInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12144,9 +23104,6 @@ def test_set_shielded_instance_integrity_policy_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["shielded_instance_integrity_policy_resource"] = { - "update_auto_learn_policy": True - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12158,10 +23115,10 @@ def test_set_shielded_instance_integrity_policy_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_shielded_instance_integrity_policy_unary(request) + client.suspend(request) -def test_set_shielded_instance_integrity_policy_unary_rest_flattened(): +def test_suspend_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12184,9 +23141,6 @@ def test_set_shielded_instance_integrity_policy_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - shielded_instance_integrity_policy_resource=compute.ShieldedInstanceIntegrityPolicy( - update_auto_learn_policy=True - ), ) mock_args.update(sample_request) @@ -12198,22 +23152,20 @@ def test_set_shielded_instance_integrity_policy_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_shielded_instance_integrity_policy_unary(**mock_args) + client.suspend(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setShieldedInstanceIntegrityPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/suspend" % client.transport._host, args[1], ) -def test_set_shielded_instance_integrity_policy_unary_rest_flattened_error( - transport: str = "rest", -): +def test_suspend_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12222,18 +23174,15 @@ def test_set_shielded_instance_integrity_policy_unary_rest_flattened_error( # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_shielded_instance_integrity_policy_unary( - compute.SetShieldedInstanceIntegrityPolicyInstanceRequest(), + client.suspend( + compute.SuspendInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - shielded_instance_integrity_policy_resource=compute.ShieldedInstanceIntegrityPolicy( - update_auto_learn_policy=True - ), ) -def test_set_shielded_instance_integrity_policy_unary_rest_error(): +def test_suspend_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12242,11 +23191,11 @@ def test_set_shielded_instance_integrity_policy_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetTagsInstanceRequest, + compute.SuspendInstanceRequest, dict, ], ) -def test_set_tags_unary_rest(request_type): +def test_suspend_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12254,10 +23203,6 @@ def test_set_tags_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["tags_resource"] = { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -12294,36 +23239,14 @@ def test_set_tags_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_tags_unary(request) + response = client.suspend_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_tags_unary_rest_required_fields( - request_type=compute.SetTagsInstanceRequest, +def test_suspend_unary_rest_required_fields( + request_type=compute.SuspendInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -12342,7 +23265,7 @@ def test_set_tags_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_tags._get_unset_required_fields(jsonified_request) + ).suspend._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -12353,7 +23276,7 @@ def test_set_tags_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_tags._get_unset_required_fields(jsonified_request) + ).suspend._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -12387,7 +23310,6 @@ def test_set_tags_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -12396,26 +23318,25 @@ def test_set_tags_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_tags_unary(request) + response = client.suspend_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_tags_unary_rest_unset_required_fields(): +def test_suspend_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_tags._get_unset_required_fields({}) + unset_fields = transport.suspend._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "instance", "project", - "tagsResource", "zone", ) ) @@ -12423,7 +23344,7 @@ def test_set_tags_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_tags_unary_rest_interceptors(null_interceptor): +def test_suspend_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -12434,9 +23355,9 @@ def test_set_tags_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_set_tags" + transports.InstancesRestInterceptor, "post_suspend" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_set_tags" + transports.InstancesRestInterceptor, "pre_suspend" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -12453,7 +23374,7 @@ def test_set_tags_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetTagsInstanceRequest() + request = compute.SuspendInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -12461,7 +23382,7 @@ def test_set_tags_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_tags_unary( + client.suspend_unary( request, metadata=[ ("key", "val"), @@ -12473,8 +23394,8 @@ def test_set_tags_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_tags_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetTagsInstanceRequest +def test_suspend_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SuspendInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12483,10 +23404,6 @@ def test_set_tags_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["tags_resource"] = { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12498,10 +23415,10 @@ def test_set_tags_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_tags_unary(request) + client.suspend_unary(request) -def test_set_tags_unary_rest_flattened(): +def test_suspend_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12524,7 +23441,6 @@ def test_set_tags_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - tags_resource=compute.Tags(fingerprint="fingerprint_value"), ) mock_args.update(sample_request) @@ -12536,20 +23452,20 @@ def test_set_tags_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_tags_unary(**mock_args) + client.suspend_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/setTags" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/suspend" % client.transport._host, args[1], ) -def test_set_tags_unary_rest_flattened_error(transport: str = "rest"): +def test_suspend_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12558,16 +23474,15 @@ def test_set_tags_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_tags_unary( - compute.SetTagsInstanceRequest(), + client.suspend_unary( + compute.SuspendInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - tags_resource=compute.Tags(fingerprint="fingerprint_value"), ) -def test_set_tags_unary_rest_error(): +def test_suspend_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12576,90 +23491,51 @@ def test_set_tags_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SimulateMaintenanceEventInstanceRequest, + compute.TestIamPermissionsInstanceRequest, dict, ], ) -def test_simulate_maintenance_event_unary_rest(request_type): +def test_test_iam_permissions_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["test_permissions_request_resource"] = { + "permissions": ["permissions_value_1", "permissions_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TestPermissionsResponse( + permissions=["permissions_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TestPermissionsResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.simulate_maintenance_event_unary(request) + response = client.test_iam_permissions(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.TestPermissionsResponse) + assert response.permissions == ["permissions_value"] -def test_simulate_maintenance_event_unary_rest_required_fields( - request_type=compute.SimulateMaintenanceEventInstanceRequest, +def test_test_iam_permissions_rest_required_fields( + request_type=compute.TestIamPermissionsInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} - request_init["instance"] = "" request_init["project"] = "" + request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -12672,25 +23548,25 @@ def test_simulate_maintenance_event_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).simulate_maintenance_event._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).simulate_maintenance_event._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "instance" in jsonified_request - assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -12701,7 +23577,7 @@ def test_simulate_maintenance_event_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TestPermissionsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -12715,33 +23591,35 @@ def test_simulate_maintenance_event_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TestPermissionsResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.simulate_maintenance_event_unary(request) + response = client.test_iam_permissions(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_simulate_maintenance_event_unary_rest_unset_required_fields(): +def test_test_iam_permissions_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.simulate_maintenance_event._get_unset_required_fields({}) + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( - "instance", "project", + "resource", + "testPermissionsRequestResource", "zone", ) ) @@ -12749,7 +23627,7 @@ def test_simulate_maintenance_event_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_simulate_maintenance_event_unary_rest_interceptors(null_interceptor): +def test_test_iam_permissions_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -12760,9 +23638,9 @@ def test_simulate_maintenance_event_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_simulate_maintenance_event" + transports.InstancesRestInterceptor, "post_test_iam_permissions" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_simulate_maintenance_event" + transports.InstancesRestInterceptor, "pre_test_iam_permissions" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -12777,17 +23655,19 @@ def test_simulate_maintenance_event_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TestPermissionsResponse.to_json( + compute.TestPermissionsResponse() + ) - request = compute.SimulateMaintenanceEventInstanceRequest() + request = compute.TestIamPermissionsInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TestPermissionsResponse - client.simulate_maintenance_event_unary( + client.test_iam_permissions( request, metadata=[ ("key", "val"), @@ -12799,9 +23679,8 @@ def test_simulate_maintenance_event_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_simulate_maintenance_event_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SimulateMaintenanceEventInstanceRequest, +def test_test_iam_permissions_rest_bad_request( + transport: str = "rest", request_type=compute.TestIamPermissionsInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12809,7 +23688,10 @@ def test_simulate_maintenance_event_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["test_permissions_request_resource"] = { + "permissions": ["permissions_value_1", "permissions_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12821,10 +23703,10 @@ def test_simulate_maintenance_event_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.simulate_maintenance_event_unary(request) + client.test_iam_permissions(request) -def test_simulate_maintenance_event_unary_rest_flattened(): +def test_test_iam_permissions_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12833,45 +23715,48 @@ def test_simulate_maintenance_event_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TestPermissionsResponse() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "instance": "sample3", + "resource": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - instance="instance_value", + resource="resource_value", + test_permissions_request_resource=compute.TestPermissionsRequest( + permissions=["permissions_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TestPermissionsResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.simulate_maintenance_event_unary(**mock_args) + client.test_iam_permissions(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/simulateMaintenanceEvent" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/testIamPermissions" % client.transport._host, args[1], ) -def test_simulate_maintenance_event_unary_rest_flattened_error(transport: str = "rest"): +def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12880,15 +23765,18 @@ def test_simulate_maintenance_event_unary_rest_flattened_error(transport: str = # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.simulate_maintenance_event_unary( - compute.SimulateMaintenanceEventInstanceRequest(), + client.test_iam_permissions( + compute.TestIamPermissionsInstanceRequest(), project="project_value", zone="zone_value", - instance="instance_value", + resource="resource_value", + test_permissions_request_resource=compute.TestPermissionsRequest( + permissions=["permissions_value"] + ), ) -def test_simulate_maintenance_event_unary_rest_error(): +def test_test_iam_permissions_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12897,11 +23785,11 @@ def test_simulate_maintenance_event_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.StartInstanceRequest, + compute.UpdateInstanceRequest, dict, ], ) -def test_start_unary_rest(request_type): +def test_update_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12909,6 +23797,173 @@ def test_start_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -12945,10 +24000,10 @@ def test_start_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.start_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -12973,7 +24028,7 @@ def test_start_unary_rest(request_type): assert response.zone == "zone_value" -def test_start_unary_rest_required_fields(request_type=compute.StartInstanceRequest): +def test_update_rest_required_fields(request_type=compute.UpdateInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -12991,7 +24046,7 @@ def test_start_unary_rest_required_fields(request_type=compute.StartInstanceRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).start._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13002,9 +24057,15 @@ def test_start_unary_rest_required_fields(request_type=compute.StartInstanceRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).start._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "minimal_action", + "most_disruptive_allowed_action", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13033,9 +24094,10 @@ def test_start_unary_rest_required_fields(request_type=compute.StartInstanceRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "put", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -13044,24 +24106,31 @@ def test_start_unary_rest_required_fields(request_type=compute.StartInstanceRequ response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.start_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_start_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.start._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "minimalAction", + "mostDisruptiveAllowedAction", + "requestId", + ) + ) & set( ( "instance", + "instanceResource", "project", "zone", ) @@ -13070,7 +24139,7 @@ def test_start_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_start_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -13081,9 +24150,9 @@ def test_start_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_start" + transports.InstancesRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_start" + transports.InstancesRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -13100,7 +24169,7 @@ def test_start_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.StartInstanceRequest() + request = compute.UpdateInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -13108,7 +24177,7 @@ def test_start_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.start_unary( + client.update( request, metadata=[ ("key", "val"), @@ -13120,8 +24189,8 @@ def test_start_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_start_unary_rest_bad_request( - transport: str = "rest", request_type=compute.StartInstanceRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13130,6 +24199,173 @@ def test_start_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13141,10 +24377,10 @@ def test_start_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.start_unary(request) + client.update(request) -def test_start_unary_rest_flattened(): +def test_update_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13167,6 +24403,11 @@ def test_start_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) + ), ) mock_args.update(sample_request) @@ -13178,20 +24419,20 @@ def test_start_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.start_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/start" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" % client.transport._host, args[1], ) -def test_start_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13200,15 +24441,20 @@ def test_start_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.start_unary( - compute.StartInstanceRequest(), + client.update( + compute.UpdateInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) + ), ) -def test_start_unary_rest_error(): +def test_update_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13217,11 +24463,11 @@ def test_start_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.StartWithEncryptionKeyInstanceRequest, + compute.UpdateInstanceRequest, dict, ], ) -def test_start_with_encryption_key_unary_rest(request_type): +def test_update_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13229,9 +24475,23 @@ def test_start_with_encryption_key_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_start_with_encryption_key_request_resource"] = { + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", "disks": [ { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", "disk_encryption_key": { "kms_key_name": "kms_key_name_value", "kms_key_service_account": "kms_key_service_account_value", @@ -13239,9 +24499,148 @@ def test_start_with_encryption_key_unary_rest(request_type): "rsa_encrypted_key": "rsa_encrypted_key_value", "sha256": "sha256_value", }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, "source": "source_value", + "type_": "type__value", } - ] + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", } request = request_type(request_init) @@ -13279,37 +24678,13 @@ def test_start_with_encryption_key_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.start_with_encryption_key_unary(request) + response = client.update_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_start_with_encryption_key_unary_rest_required_fields( - request_type=compute.StartWithEncryptionKeyInstanceRequest, -): +def test_update_unary_rest_required_fields(request_type=compute.UpdateInstanceRequest): transport_class = transports.InstancesRestTransport request_init = {} @@ -13327,7 +24702,7 @@ def test_start_with_encryption_key_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).start_with_encryption_key._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13338,9 +24713,15 @@ def test_start_with_encryption_key_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).start_with_encryption_key._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "minimal_action", + "most_disruptive_allowed_action", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13369,7 +24750,7 @@ def test_start_with_encryption_key_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -13381,25 +24762,31 @@ def test_start_with_encryption_key_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.start_with_encryption_key_unary(request) + response = client.update_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_start_with_encryption_key_unary_rest_unset_required_fields(): +def test_update_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.start_with_encryption_key._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "minimalAction", + "mostDisruptiveAllowedAction", + "requestId", + ) + ) & set( ( "instance", - "instancesStartWithEncryptionKeyRequestResource", + "instanceResource", "project", "zone", ) @@ -13408,7 +24795,7 @@ def test_start_with_encryption_key_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): +def test_update_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -13419,9 +24806,9 @@ def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_start_with_encryption_key" + transports.InstancesRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_start_with_encryption_key" + transports.InstancesRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -13438,7 +24825,7 @@ def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.StartWithEncryptionKeyInstanceRequest() + request = compute.UpdateInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -13446,7 +24833,7 @@ def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.start_with_encryption_key_unary( + client.update_unary( request, metadata=[ ("key", "val"), @@ -13458,8 +24845,8 @@ def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_start_with_encryption_key_unary_rest_bad_request( - transport: str = "rest", request_type=compute.StartWithEncryptionKeyInstanceRequest +def test_update_unary_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13468,9 +24855,23 @@ def test_start_with_encryption_key_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instances_start_with_encryption_key_request_resource"] = { + request_init["instance_resource"] = { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "cpu_platform": "cpu_platform_value", + "creation_timestamp": "creation_timestamp_value", + "deletion_protection": True, + "description": "description_value", "disks": [ { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", "disk_encryption_key": { "kms_key_name": "kms_key_name_value", "kms_key_service_account": "kms_key_service_account_value", @@ -13478,9 +24879,148 @@ def test_start_with_encryption_key_unary_rest_bad_request( "rsa_encrypted_key": "rsa_encrypted_key_value", "sha256": "sha256_value", }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, "source": "source_value", + "type_": "type__value", } - ] + ], + "display_device": {"enable_display": True}, + "fingerprint": "fingerprint_value", + "guest_accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "hostname": "hostname_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_start_timestamp": "last_start_timestamp_value", + "last_stop_timestamp": "last_stop_timestamp_value", + "last_suspended_timestamp": "last_suspended_timestamp_value", + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "name": "name_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "params": {"resource_manager_tags": {}}, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "self_link": "self_link_value", + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, + "source_machine_image": "source_machine_image_value", + "source_machine_image_encryption_key": {}, + "start_restricted": True, + "status": "status_value", + "status_message": "status_message_value", + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + "zone": "zone_value", } request = request_type(request_init) @@ -13493,10 +25033,10 @@ def test_start_with_encryption_key_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.start_with_encryption_key_unary(request) + client.update_unary(request) -def test_start_with_encryption_key_unary_rest_flattened(): +def test_update_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13519,14 +25059,10 @@ def test_start_with_encryption_key_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instances_start_with_encryption_key_request_resource=compute.InstancesStartWithEncryptionKeyRequest( - disks=[ - compute.CustomerEncryptionKeyProtectedDisk( - disk_encryption_key=compute.CustomerEncryptionKey( - kms_key_name="kms_key_name_value" - ) - ) - ] + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) ), ) mock_args.update(sample_request) @@ -13539,20 +25075,20 @@ def test_start_with_encryption_key_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.start_with_encryption_key_unary(**mock_args) + client.update_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/startWithEncryptionKey" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" % client.transport._host, args[1], ) -def test_start_with_encryption_key_unary_rest_flattened_error(transport: str = "rest"): +def test_update_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13561,24 +25097,20 @@ def test_start_with_encryption_key_unary_rest_flattened_error(transport: str = " # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.start_with_encryption_key_unary( - compute.StartWithEncryptionKeyInstanceRequest(), + client.update_unary( + compute.UpdateInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instances_start_with_encryption_key_request_resource=compute.InstancesStartWithEncryptionKeyRequest( - disks=[ - compute.CustomerEncryptionKeyProtectedDisk( - disk_encryption_key=compute.CustomerEncryptionKey( - kms_key_name="kms_key_name_value" - ) - ) - ] + instance_resource=compute.Instance( + advanced_machine_features=compute.AdvancedMachineFeatures( + enable_nested_virtualization=True + ) ), ) -def test_start_with_encryption_key_unary_rest_error(): +def test_update_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13587,11 +25119,11 @@ def test_start_with_encryption_key_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.StopInstanceRequest, + compute.UpdateAccessConfigInstanceRequest, dict, ], ) -def test_stop_unary_rest(request_type): +def test_update_access_config_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13599,6 +25131,17 @@ def test_stop_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["access_config_resource"] = { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -13635,10 +25178,10 @@ def test_stop_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.stop_unary(request) + response = client.update_access_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -13663,11 +25206,14 @@ def test_stop_unary_rest(request_type): assert response.zone == "zone_value" -def test_stop_unary_rest_required_fields(request_type=compute.StopInstanceRequest): +def test_update_access_config_rest_required_fields( + request_type=compute.UpdateAccessConfigInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} request_init["instance"] = "" + request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -13678,28 +25224,39 @@ def test_stop_unary_rest_required_fields(request_type=compute.StopInstanceReques ) # verify fields with default values are dropped + assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).stop._get_unset_required_fields(jsonified_request) + ).update_access_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).stop._get_unset_required_fields(jsonified_request) + ).update_access_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "network_interface", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -13726,6 +25283,7 @@ def test_stop_unary_rest_required_fields(request_type=compute.StopInstanceReques "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -13734,24 +25292,36 @@ def test_stop_unary_rest_required_fields(request_type=compute.StopInstanceReques response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.stop_unary(request) + response = client.update_access_config(request) - expected_params = [] + expected_params = [ + ( + "networkInterface", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_stop_unary_rest_unset_required_fields(): +def test_update_access_config_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.stop._get_unset_required_fields({}) + unset_fields = transport.update_access_config._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "networkInterface", + "requestId", + ) + ) & set( ( + "accessConfigResource", "instance", + "networkInterface", "project", "zone", ) @@ -13760,7 +25330,7 @@ def test_stop_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_stop_unary_rest_interceptors(null_interceptor): +def test_update_access_config_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -13771,9 +25341,9 @@ def test_stop_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_stop" + transports.InstancesRestInterceptor, "post_update_access_config" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_stop" + transports.InstancesRestInterceptor, "pre_update_access_config" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -13790,7 +25360,7 @@ def test_stop_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.StopInstanceRequest() + request = compute.UpdateAccessConfigInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -13798,7 +25368,7 @@ def test_stop_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.stop_unary( + client.update_access_config( request, metadata=[ ("key", "val"), @@ -13810,8 +25380,8 @@ def test_stop_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_stop_unary_rest_bad_request( - transport: str = "rest", request_type=compute.StopInstanceRequest +def test_update_access_config_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateAccessConfigInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13820,6 +25390,17 @@ def test_stop_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["access_config_resource"] = { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13831,10 +25412,10 @@ def test_stop_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.stop_unary(request) + client.update_access_config(request) -def test_stop_unary_rest_flattened(): +def test_update_access_config_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13857,6 +25438,10 @@ def test_stop_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + network_interface="network_interface_value", + access_config_resource=compute.AccessConfig( + external_ipv6="external_ipv6_value" + ), ) mock_args.update(sample_request) @@ -13868,20 +25453,20 @@ def test_stop_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.stop_unary(**mock_args) + client.update_access_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/stop" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateAccessConfig" % client.transport._host, args[1], ) -def test_stop_unary_rest_flattened_error(transport: str = "rest"): +def test_update_access_config_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13890,15 +25475,19 @@ def test_stop_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.stop_unary( - compute.StopInstanceRequest(), + client.update_access_config( + compute.UpdateAccessConfigInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + network_interface="network_interface_value", + access_config_resource=compute.AccessConfig( + external_ipv6="external_ipv6_value" + ), ) -def test_stop_unary_rest_error(): +def test_update_access_config_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13907,11 +25496,11 @@ def test_stop_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SuspendInstanceRequest, + compute.UpdateAccessConfigInstanceRequest, dict, ], ) -def test_suspend_unary_rest(request_type): +def test_update_access_config_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13919,6 +25508,17 @@ def test_suspend_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["access_config_resource"] = { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -13955,41 +25555,20 @@ def test_suspend_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.suspend_unary(request) + response = client.update_access_config_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_suspend_unary_rest_required_fields( - request_type=compute.SuspendInstanceRequest, +def test_update_access_config_unary_rest_required_fields( + request_type=compute.UpdateAccessConfigInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} request_init["instance"] = "" + request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -14000,28 +25579,39 @@ def test_suspend_unary_rest_required_fields( ) # verify fields with default values are dropped + assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).suspend._get_unset_required_fields(jsonified_request) + ).update_access_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).suspend._get_unset_required_fields(jsonified_request) + ).update_access_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "network_interface", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -14048,6 +25638,7 @@ def test_suspend_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -14056,24 +25647,36 @@ def test_suspend_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.suspend_unary(request) + response = client.update_access_config_unary(request) - expected_params = [] + expected_params = [ + ( + "networkInterface", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_suspend_unary_rest_unset_required_fields(): +def test_update_access_config_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.suspend._get_unset_required_fields({}) + unset_fields = transport.update_access_config._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "networkInterface", + "requestId", + ) + ) & set( ( + "accessConfigResource", "instance", + "networkInterface", "project", "zone", ) @@ -14082,7 +25685,7 @@ def test_suspend_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_suspend_unary_rest_interceptors(null_interceptor): +def test_update_access_config_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -14093,9 +25696,9 @@ def test_suspend_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_suspend" + transports.InstancesRestInterceptor, "post_update_access_config" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_suspend" + transports.InstancesRestInterceptor, "pre_update_access_config" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -14112,7 +25715,7 @@ def test_suspend_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SuspendInstanceRequest() + request = compute.UpdateAccessConfigInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -14120,7 +25723,7 @@ def test_suspend_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.suspend_unary( + client.update_access_config_unary( request, metadata=[ ("key", "val"), @@ -14132,8 +25735,8 @@ def test_suspend_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_suspend_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SuspendInstanceRequest +def test_update_access_config_unary_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateAccessConfigInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14142,6 +25745,17 @@ def test_suspend_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["access_config_resource"] = { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14153,10 +25767,10 @@ def test_suspend_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.suspend_unary(request) + client.update_access_config_unary(request) -def test_suspend_unary_rest_flattened(): +def test_update_access_config_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14179,6 +25793,10 @@ def test_suspend_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", + network_interface="network_interface_value", + access_config_resource=compute.AccessConfig( + external_ipv6="external_ipv6_value" + ), ) mock_args.update(sample_request) @@ -14190,20 +25808,20 @@ def test_suspend_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.suspend_unary(**mock_args) + client.update_access_config_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/suspend" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateAccessConfig" % client.transport._host, args[1], ) -def test_suspend_unary_rest_flattened_error(transport: str = "rest"): +def test_update_access_config_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14212,15 +25830,19 @@ def test_suspend_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.suspend_unary( - compute.SuspendInstanceRequest(), + client.update_access_config_unary( + compute.UpdateAccessConfigInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", + network_interface="network_interface_value", + access_config_resource=compute.AccessConfig( + external_ipv6="external_ipv6_value" + ), ) -def test_suspend_unary_rest_error(): +def test_update_access_config_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -14229,51 +25851,91 @@ def test_suspend_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.TestIamPermissionsInstanceRequest, + compute.UpdateDisplayDeviceInstanceRequest, dict, ], ) -def test_test_iam_permissions_rest(request_type): +def test_update_display_device_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["test_permissions_request_resource"] = { - "permissions": ["permissions_value_1", "permissions_value_2"] - } + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["display_device_resource"] = {"enable_display": True} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TestPermissionsResponse( - permissions=["permissions_value"], + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TestPermissionsResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update_display_device(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TestPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_test_iam_permissions_rest_required_fields( - request_type=compute.TestIamPermissionsInstanceRequest, +def test_update_display_device_rest_required_fields( + request_type=compute.UpdateDisplayDeviceInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} + request_init["instance"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -14286,25 +25948,27 @@ def test_test_iam_permissions_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update_display_device._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instance"] = "instance_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update_display_device._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instance" in jsonified_request + assert jsonified_request["instance"] == "instance_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -14315,7 +25979,7 @@ def test_test_iam_permissions_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TestPermissionsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14326,7 +25990,7 @@ def test_test_iam_permissions_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -14334,30 +25998,30 @@ def test_test_iam_permissions_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.TestPermissionsResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update_display_device(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_test_iam_permissions_rest_unset_required_fields(): +def test_update_display_device_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) + unset_fields = transport.update_display_device._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( + "displayDeviceResource", + "instance", "project", - "resource", - "testPermissionsRequestResource", "zone", ) ) @@ -14365,7 +26029,7 @@ def test_test_iam_permissions_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): +def test_update_display_device_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -14376,9 +26040,9 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_test_iam_permissions" + transports.InstancesRestInterceptor, "post_update_display_device" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_test_iam_permissions" + transports.InstancesRestInterceptor, "pre_update_display_device" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -14393,19 +26057,17 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TestPermissionsResponse.to_json( - compute.TestPermissionsResponse() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.TestIamPermissionsInstanceRequest() + request = compute.UpdateDisplayDeviceInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.Operation - client.test_iam_permissions( + client.update_display_device( request, metadata=[ ("key", "val"), @@ -14417,8 +26079,8 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): post.assert_called_once() -def test_test_iam_permissions_rest_bad_request( - transport: str = "rest", request_type=compute.TestIamPermissionsInstanceRequest +def test_update_display_device_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateDisplayDeviceInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14426,10 +26088,8 @@ def test_test_iam_permissions_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["test_permissions_request_resource"] = { - "permissions": ["permissions_value_1", "permissions_value_2"] - } + request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} + request_init["display_device_resource"] = {"enable_display": True} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14441,10 +26101,10 @@ def test_test_iam_permissions_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.test_iam_permissions(request) + client.update_display_device(request) -def test_test_iam_permissions_rest_flattened(): +def test_update_display_device_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14453,48 +26113,46 @@ def test_test_iam_permissions_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TestPermissionsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "instance": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", - test_permissions_request_resource=compute.TestPermissionsRequest( - permissions=["permissions_value"] - ), + instance="instance_value", + display_device_resource=compute.DisplayDevice(enable_display=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TestPermissionsResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.test_iam_permissions(**mock_args) + client.update_display_device(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{resource}/testIamPermissions" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateDisplayDevice" % client.transport._host, args[1], ) -def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): +def test_update_display_device_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14503,18 +26161,16 @@ def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.test_iam_permissions( - compute.TestIamPermissionsInstanceRequest(), + client.update_display_device( + compute.UpdateDisplayDeviceInstanceRequest(), project="project_value", zone="zone_value", - resource="resource_value", - test_permissions_request_resource=compute.TestPermissionsRequest( - permissions=["permissions_value"] - ), + instance="instance_value", + display_device_resource=compute.DisplayDevice(enable_display=True), ) -def test_test_iam_permissions_rest_error(): +def test_update_display_device_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -14523,11 +26179,11 @@ def test_test_iam_permissions_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.UpdateInstanceRequest, + compute.UpdateDisplayDeviceInstanceRequest, dict, ], ) -def test_update_unary_rest(request_type): +def test_update_display_device_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14535,173 +26191,7 @@ def test_update_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instance_resource"] = { - "advanced_machine_features": { - "enable_nested_virtualization": True, - "enable_uefi_networking": True, - "threads_per_core": 1689, - }, - "can_ip_forward": True, - "confidential_instance_config": {"enable_confidential_compute": True}, - "cpu_platform": "cpu_platform_value", - "creation_timestamp": "creation_timestamp_value", - "deletion_protection": True, - "description": "description_value", - "disks": [ - { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [ - {"content": "content_value", "file_type": "file_type_value"} - ], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", - } - ], - "display_device": {"enable_display": True}, - "fingerprint": "fingerprint_value", - "guest_accelerators": [ - {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} - ], - "hostname": "hostname_value", - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_start_timestamp": "last_start_timestamp_value", - "last_stop_timestamp": "last_stop_timestamp_value", - "last_suspended_timestamp": "last_suspended_timestamp_value", - "machine_type": "machine_type_value", - "metadata": { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", - }, - "min_cpu_platform": "min_cpu_platform_value", - "name": "name_value", - "network_interfaces": [ - { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", - } - ], - "network_performance_config": { - "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" - }, - "params": {"resource_manager_tags": {}}, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "reservation_affinity": { - "consume_reservation_type": "consume_reservation_type_value", - "key": "key_value", - "values": ["values_value_1", "values_value_2"], - }, - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "scheduling": { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - }, - "self_link": "self_link_value", - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} - ], - "shielded_instance_config": { - "enable_integrity_monitoring": True, - "enable_secure_boot": True, - "enable_vtpm": True, - }, - "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, - "source_machine_image": "source_machine_image_value", - "source_machine_image_encryption_key": {}, - "start_restricted": True, - "status": "status_value", - "status_message": "status_message_value", - "tags": { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - }, - "zone": "zone_value", - } + request_init["display_device_resource"] = {"enable_display": True} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -14730,43 +26220,23 @@ def test_update_unary_rest(request_type): target_link="target_link_value", user="user_value", zone="zone_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.update_unary(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.update_display_device_unary(request) + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) -def test_update_unary_rest_required_fields(request_type=compute.UpdateInstanceRequest): + +def test_update_display_device_unary_rest_required_fields( + request_type=compute.UpdateDisplayDeviceInstanceRequest, +): transport_class = transports.InstancesRestTransport request_init = {} @@ -14784,7 +26254,7 @@ def test_update_unary_rest_required_fields(request_type=compute.UpdateInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update._get_unset_required_fields(jsonified_request) + ).update_display_device._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -14795,15 +26265,9 @@ def test_update_unary_rest_required_fields(request_type=compute.UpdateInstanceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update._get_unset_required_fields(jsonified_request) + ).update_display_device._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "minimal_action", - "most_disruptive_allowed_action", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -14832,7 +26296,7 @@ def test_update_unary_rest_required_fields(request_type=compute.UpdateInstanceRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "put", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -14844,31 +26308,25 @@ def test_update_unary_rest_required_fields(request_type=compute.UpdateInstanceRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_unary(request) + response = client.update_display_device_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_unary_rest_unset_required_fields(): +def test_update_display_device_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update._get_unset_required_fields({}) + unset_fields = transport.update_display_device._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "minimalAction", - "mostDisruptiveAllowedAction", - "requestId", - ) - ) + set(("requestId",)) & set( ( + "displayDeviceResource", "instance", - "instanceResource", "project", "zone", ) @@ -14877,7 +26335,7 @@ def test_update_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_unary_rest_interceptors(null_interceptor): +def test_update_display_device_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -14888,9 +26346,9 @@ def test_update_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_update" + transports.InstancesRestInterceptor, "post_update_display_device" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_update" + transports.InstancesRestInterceptor, "pre_update_display_device" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -14907,7 +26365,7 @@ def test_update_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.UpdateInstanceRequest() + request = compute.UpdateDisplayDeviceInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -14915,7 +26373,7 @@ def test_update_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.update_unary( + client.update_display_device_unary( request, metadata=[ ("key", "val"), @@ -14927,8 +26385,8 @@ def test_update_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_unary_rest_bad_request( - transport: str = "rest", request_type=compute.UpdateInstanceRequest +def test_update_display_device_unary_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateDisplayDeviceInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14937,173 +26395,7 @@ def test_update_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["instance_resource"] = { - "advanced_machine_features": { - "enable_nested_virtualization": True, - "enable_uefi_networking": True, - "threads_per_core": 1689, - }, - "can_ip_forward": True, - "confidential_instance_config": {"enable_confidential_compute": True}, - "cpu_platform": "cpu_platform_value", - "creation_timestamp": "creation_timestamp_value", - "deletion_protection": True, - "description": "description_value", - "disks": [ - { - "auto_delete": True, - "boot": True, - "device_name": "device_name_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "disk_size_gb": 1261, - "guest_os_features": [{"type_": "type__value"}], - "index": 536, - "initialize_params": { - "description": "description_value", - "disk_name": "disk_name_value", - "disk_size_gb": 1261, - "disk_type": "disk_type_value", - "labels": {}, - "licenses": ["licenses_value_1", "licenses_value_2"], - "on_update_action": "on_update_action_value", - "provisioned_iops": 1740, - "resource_policies": [ - "resource_policies_value_1", - "resource_policies_value_2", - ], - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - }, - "interface": "interface_value", - "kind": "kind_value", - "licenses": ["licenses_value_1", "licenses_value_2"], - "mode": "mode_value", - "shielded_instance_initial_state": { - "dbs": [ - {"content": "content_value", "file_type": "file_type_value"} - ], - "dbxs": {}, - "keks": {}, - "pk": {}, - }, - "source": "source_value", - "type_": "type__value", - } - ], - "display_device": {"enable_display": True}, - "fingerprint": "fingerprint_value", - "guest_accelerators": [ - {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} - ], - "hostname": "hostname_value", - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_start_timestamp": "last_start_timestamp_value", - "last_stop_timestamp": "last_stop_timestamp_value", - "last_suspended_timestamp": "last_suspended_timestamp_value", - "machine_type": "machine_type_value", - "metadata": { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", - }, - "min_cpu_platform": "min_cpu_platform_value", - "name": "name_value", - "network_interfaces": [ - { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", - } - ], - "network_performance_config": { - "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" - }, - "params": {"resource_manager_tags": {}}, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "reservation_affinity": { - "consume_reservation_type": "consume_reservation_type_value", - "key": "key_value", - "values": ["values_value_1", "values_value_2"], - }, - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "scheduling": { - "automatic_restart": True, - "instance_termination_action": "instance_termination_action_value", - "location_hint": "location_hint_value", - "min_node_cpus": 1379, - "node_affinities": [ - { - "key": "key_value", - "operator": "operator_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "on_host_maintenance": "on_host_maintenance_value", - "preemptible": True, - "provisioning_model": "provisioning_model_value", - }, - "self_link": "self_link_value", - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} - ], - "shielded_instance_config": { - "enable_integrity_monitoring": True, - "enable_secure_boot": True, - "enable_vtpm": True, - }, - "shielded_instance_integrity_policy": {"update_auto_learn_policy": True}, - "source_machine_image": "source_machine_image_value", - "source_machine_image_encryption_key": {}, - "start_restricted": True, - "status": "status_value", - "status_message": "status_message_value", - "tags": { - "fingerprint": "fingerprint_value", - "items": ["items_value_1", "items_value_2"], - }, - "zone": "zone_value", - } + request_init["display_device_resource"] = {"enable_display": True} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15115,10 +26407,10 @@ def test_update_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_unary(request) + client.update_display_device_unary(request) -def test_update_unary_rest_flattened(): +def test_update_display_device_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15141,11 +26433,7 @@ def test_update_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - instance_resource=compute.Instance( - advanced_machine_features=compute.AdvancedMachineFeatures( - enable_nested_virtualization=True - ) - ), + display_device_resource=compute.DisplayDevice(enable_display=True), ) mock_args.update(sample_request) @@ -15157,20 +26445,20 @@ def test_update_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_unary(**mock_args) + client.update_display_device_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateDisplayDevice" % client.transport._host, args[1], ) -def test_update_unary_rest_flattened_error(transport: str = "rest"): +def test_update_display_device_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15179,20 +26467,16 @@ def test_update_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_unary( - compute.UpdateInstanceRequest(), + client.update_display_device_unary( + compute.UpdateDisplayDeviceInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - instance_resource=compute.Instance( - advanced_machine_features=compute.AdvancedMachineFeatures( - enable_nested_virtualization=True - ) - ), + display_device_resource=compute.DisplayDevice(enable_display=True), ) -def test_update_unary_rest_error(): +def test_update_display_device_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -15201,11 +26485,11 @@ def test_update_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.UpdateAccessConfigInstanceRequest, + compute.UpdateNetworkInterfaceInstanceRequest, dict, ], ) -def test_update_access_config_unary_rest(request_type): +def test_update_network_interface_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15213,16 +26497,39 @@ def test_update_access_config_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["access_config_resource"] = { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, + request_init["network_interface_resource"] = { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", "kind": "kind_value", "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", } request = request_type(request_init) @@ -15260,10 +26567,10 @@ def test_update_access_config_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_access_config_unary(request) + response = client.update_network_interface(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -15288,8 +26595,8 @@ def test_update_access_config_unary_rest(request_type): assert response.zone == "zone_value" -def test_update_access_config_unary_rest_required_fields( - request_type=compute.UpdateAccessConfigInstanceRequest, +def test_update_network_interface_rest_required_fields( + request_type=compute.UpdateNetworkInterfaceInstanceRequest, ): transport_class = transports.InstancesRestTransport @@ -15310,7 +26617,7 @@ def test_update_access_config_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_access_config._get_unset_required_fields(jsonified_request) + ).update_network_interface._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -15324,7 +26631,7 @@ def test_update_access_config_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_access_config._get_unset_required_fields(jsonified_request) + ).update_network_interface._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -15362,7 +26669,7 @@ def test_update_access_config_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -15374,7 +26681,7 @@ def test_update_access_config_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_access_config_unary(request) + response = client.update_network_interface(request) expected_params = [ ( @@ -15386,12 +26693,12 @@ def test_update_access_config_unary_rest_required_fields( assert expected_params == actual_params -def test_update_access_config_unary_rest_unset_required_fields(): +def test_update_network_interface_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_access_config._get_unset_required_fields({}) + unset_fields = transport.update_network_interface._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( @@ -15401,9 +26708,9 @@ def test_update_access_config_unary_rest_unset_required_fields(): ) & set( ( - "accessConfigResource", "instance", "networkInterface", + "networkInterfaceResource", "project", "zone", ) @@ -15412,7 +26719,7 @@ def test_update_access_config_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_access_config_unary_rest_interceptors(null_interceptor): +def test_update_network_interface_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -15423,9 +26730,9 @@ def test_update_access_config_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_update_access_config" + transports.InstancesRestInterceptor, "post_update_network_interface" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_update_access_config" + transports.InstancesRestInterceptor, "pre_update_network_interface" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -15442,7 +26749,7 @@ def test_update_access_config_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.UpdateAccessConfigInstanceRequest() + request = compute.UpdateNetworkInterfaceInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -15450,7 +26757,7 @@ def test_update_access_config_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.update_access_config_unary( + client.update_network_interface( request, metadata=[ ("key", "val"), @@ -15462,8 +26769,8 @@ def test_update_access_config_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_access_config_unary_rest_bad_request( - transport: str = "rest", request_type=compute.UpdateAccessConfigInstanceRequest +def test_update_network_interface_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateNetworkInterfaceInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15472,16 +26779,39 @@ def test_update_access_config_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["access_config_resource"] = { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, + request_init["network_interface_resource"] = { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", "kind": "kind_value", "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", } request = request_type(request_init) @@ -15494,10 +26824,10 @@ def test_update_access_config_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_access_config_unary(request) + client.update_network_interface(request) -def test_update_access_config_unary_rest_flattened(): +def test_update_network_interface_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15521,8 +26851,10 @@ def test_update_access_config_unary_rest_flattened(): zone="zone_value", instance="instance_value", network_interface="network_interface_value", - access_config_resource=compute.AccessConfig( - external_ipv6="external_ipv6_value" + network_interface_resource=compute.NetworkInterface( + access_configs=[ + compute.AccessConfig(external_ipv6="external_ipv6_value") + ] ), ) mock_args.update(sample_request) @@ -15535,20 +26867,20 @@ def test_update_access_config_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_access_config_unary(**mock_args) + client.update_network_interface(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateAccessConfig" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateNetworkInterface" % client.transport._host, args[1], ) -def test_update_access_config_unary_rest_flattened_error(transport: str = "rest"): +def test_update_network_interface_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15557,19 +26889,21 @@ def test_update_access_config_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_access_config_unary( - compute.UpdateAccessConfigInstanceRequest(), + client.update_network_interface( + compute.UpdateNetworkInterfaceInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", network_interface="network_interface_value", - access_config_resource=compute.AccessConfig( - external_ipv6="external_ipv6_value" + network_interface_resource=compute.NetworkInterface( + access_configs=[ + compute.AccessConfig(external_ipv6="external_ipv6_value") + ] ), ) -def test_update_access_config_unary_rest_error(): +def test_update_network_interface_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -15578,11 +26912,11 @@ def test_update_access_config_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.UpdateDisplayDeviceInstanceRequest, + compute.UpdateNetworkInterfaceInstanceRequest, dict, ], ) -def test_update_display_device_unary_rest(request_type): +def test_update_network_interface_unary_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15590,7 +26924,40 @@ def test_update_display_device_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["display_device_resource"] = {"enable_display": True} + request_init["network_interface_resource"] = { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -15627,41 +26994,20 @@ def test_update_display_device_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_display_device_unary(request) + response = client.update_network_interface_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_update_display_device_unary_rest_required_fields( - request_type=compute.UpdateDisplayDeviceInstanceRequest, +def test_update_network_interface_unary_rest_required_fields( + request_type=compute.UpdateNetworkInterfaceInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} request_init["instance"] = "" + request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -15672,28 +27018,39 @@ def test_update_display_device_unary_rest_required_fields( ) # verify fields with default values are dropped + assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_display_device._get_unset_required_fields(jsonified_request) + ).update_network_interface._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == request_init["network_interface"] jsonified_request["instance"] = "instance_value" + jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_display_device._get_unset_required_fields(jsonified_request) + ).update_network_interface._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "network_interface", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" + assert "networkInterface" in jsonified_request + assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -15729,25 +27086,36 @@ def test_update_display_device_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_display_device_unary(request) + response = client.update_network_interface_unary(request) - expected_params = [] + expected_params = [ + ( + "networkInterface", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_display_device_unary_rest_unset_required_fields(): +def test_update_network_interface_unary_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_display_device._get_unset_required_fields({}) + unset_fields = transport.update_network_interface._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "networkInterface", + "requestId", + ) + ) & set( ( - "displayDeviceResource", "instance", + "networkInterface", + "networkInterfaceResource", "project", "zone", ) @@ -15756,7 +27124,7 @@ def test_update_display_device_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_display_device_unary_rest_interceptors(null_interceptor): +def test_update_network_interface_unary_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -15767,9 +27135,9 @@ def test_update_display_device_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_update_display_device" + transports.InstancesRestInterceptor, "post_update_network_interface" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_update_display_device" + transports.InstancesRestInterceptor, "pre_update_network_interface" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -15786,7 +27154,7 @@ def test_update_display_device_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.UpdateDisplayDeviceInstanceRequest() + request = compute.UpdateNetworkInterfaceInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -15794,7 +27162,7 @@ def test_update_display_device_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.update_display_device_unary( + client.update_network_interface_unary( request, metadata=[ ("key", "val"), @@ -15806,8 +27174,8 @@ def test_update_display_device_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_display_device_unary_rest_bad_request( - transport: str = "rest", request_type=compute.UpdateDisplayDeviceInstanceRequest +def test_update_network_interface_unary_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateNetworkInterfaceInstanceRequest ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15816,7 +27184,40 @@ def test_update_display_device_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["display_device_resource"] = {"enable_display": True} + request_init["network_interface_resource"] = { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15828,10 +27229,10 @@ def test_update_display_device_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_display_device_unary(request) + client.update_network_interface_unary(request) -def test_update_display_device_unary_rest_flattened(): +def test_update_network_interface_unary_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15854,7 +27255,12 @@ def test_update_display_device_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - display_device_resource=compute.DisplayDevice(enable_display=True), + network_interface="network_interface_value", + network_interface_resource=compute.NetworkInterface( + access_configs=[ + compute.AccessConfig(external_ipv6="external_ipv6_value") + ] + ), ) mock_args.update(sample_request) @@ -15866,20 +27272,20 @@ def test_update_display_device_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_display_device_unary(**mock_args) + client.update_network_interface_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateDisplayDevice" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateNetworkInterface" % client.transport._host, args[1], ) -def test_update_display_device_unary_rest_flattened_error(transport: str = "rest"): +def test_update_network_interface_unary_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15888,16 +27294,21 @@ def test_update_display_device_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_display_device_unary( - compute.UpdateDisplayDeviceInstanceRequest(), + client.update_network_interface_unary( + compute.UpdateNetworkInterfaceInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - display_device_resource=compute.DisplayDevice(enable_display=True), + network_interface="network_interface_value", + network_interface_resource=compute.NetworkInterface( + access_configs=[ + compute.AccessConfig(external_ipv6="external_ipv6_value") + ] + ), ) -def test_update_display_device_unary_rest_error(): +def test_update_network_interface_unary_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -15906,11 +27317,11 @@ def test_update_display_device_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.UpdateNetworkInterfaceInstanceRequest, + compute.UpdateShieldedInstanceConfigInstanceRequest, dict, ], ) -def test_update_network_interface_unary_rest(request_type): +def test_update_shielded_instance_config_rest(request_type): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15918,39 +27329,10 @@ def test_update_network_interface_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["network_interface_resource"] = { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", + request_init["shielded_instance_config_resource"] = { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, } request = request_type(request_init) @@ -15988,10 +27370,10 @@ def test_update_network_interface_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_network_interface_unary(request) + response = client.update_shielded_instance_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -16016,14 +27398,13 @@ def test_update_network_interface_unary_rest(request_type): assert response.zone == "zone_value" -def test_update_network_interface_unary_rest_required_fields( - request_type=compute.UpdateNetworkInterfaceInstanceRequest, +def test_update_shielded_instance_config_rest_required_fields( + request_type=compute.UpdateShieldedInstanceConfigInstanceRequest, ): transport_class = transports.InstancesRestTransport request_init = {} request_init["instance"] = "" - request_init["network_interface"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -16034,39 +27415,28 @@ def test_update_network_interface_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "networkInterface" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_network_interface._get_unset_required_fields(jsonified_request) + ).update_shielded_instance_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "networkInterface" in jsonified_request - assert jsonified_request["networkInterface"] == request_init["network_interface"] jsonified_request["instance"] = "instance_value" - jsonified_request["networkInterface"] = "network_interface_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_network_interface._get_unset_required_fields(jsonified_request) + ).update_shielded_instance_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "network_interface", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "instance" in jsonified_request assert jsonified_request["instance"] == "instance_value" - assert "networkInterface" in jsonified_request - assert jsonified_request["networkInterface"] == "network_interface_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -16102,37 +27472,28 @@ def test_update_network_interface_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_network_interface_unary(request) + response = client.update_shielded_instance_config(request) - expected_params = [ - ( - "networkInterface", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_network_interface_unary_rest_unset_required_fields(): +def test_update_shielded_instance_config_rest_unset_required_fields(): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_network_interface._get_unset_required_fields({}) + unset_fields = transport.update_shielded_instance_config._get_unset_required_fields( + {} + ) assert set(unset_fields) == ( - set( - ( - "networkInterface", - "requestId", - ) - ) + set(("requestId",)) & set( ( "instance", - "networkInterface", - "networkInterfaceResource", "project", + "shieldedInstanceConfigResource", "zone", ) ) @@ -16140,7 +27501,7 @@ def test_update_network_interface_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_network_interface_unary_rest_interceptors(null_interceptor): +def test_update_shielded_instance_config_rest_interceptors(null_interceptor): transport = transports.InstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.InstancesRestInterceptor(), @@ -16151,9 +27512,9 @@ def test_update_network_interface_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InstancesRestInterceptor, "post_update_network_interface" + transports.InstancesRestInterceptor, "post_update_shielded_instance_config" ) as post, mock.patch.object( - transports.InstancesRestInterceptor, "pre_update_network_interface" + transports.InstancesRestInterceptor, "pre_update_shielded_instance_config" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -16170,7 +27531,7 @@ def test_update_network_interface_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.UpdateNetworkInterfaceInstanceRequest() + request = compute.UpdateShieldedInstanceConfigInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -16178,7 +27539,7 @@ def test_update_network_interface_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.update_network_interface_unary( + client.update_shielded_instance_config( request, metadata=[ ("key", "val"), @@ -16190,8 +27551,9 @@ def test_update_network_interface_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_network_interface_unary_rest_bad_request( - transport: str = "rest", request_type=compute.UpdateNetworkInterfaceInstanceRequest +def test_update_shielded_instance_config_rest_bad_request( + transport: str = "rest", + request_type=compute.UpdateShieldedInstanceConfigInstanceRequest, ): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -16200,39 +27562,10 @@ def test_update_network_interface_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "instance": "sample3"} - request_init["network_interface_resource"] = { - "access_configs": [ - { - "external_ipv6": "external_ipv6_value", - "external_ipv6_prefix_length": 2837, - "kind": "kind_value", - "name": "name_value", - "nat_i_p": "nat_i_p_value", - "network_tier": "network_tier_value", - "public_ptr_domain_name": "public_ptr_domain_name_value", - "set_public_ptr": True, - "type_": "type__value", - } - ], - "alias_ip_ranges": [ - { - "ip_cidr_range": "ip_cidr_range_value", - "subnetwork_range_name": "subnetwork_range_name_value", - } - ], - "fingerprint": "fingerprint_value", - "internal_ipv6_prefix_length": 2831, - "ipv6_access_configs": {}, - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_address": "ipv6_address_value", - "kind": "kind_value", - "name": "name_value", - "network": "network_value", - "network_i_p": "network_i_p_value", - "nic_type": "nic_type_value", - "queue_count": 1197, - "stack_type": "stack_type_value", - "subnetwork": "subnetwork_value", + request_init["shielded_instance_config_resource"] = { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, } request = request_type(request_init) @@ -16245,10 +27578,10 @@ def test_update_network_interface_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_network_interface_unary(request) + client.update_shielded_instance_config(request) -def test_update_network_interface_unary_rest_flattened(): +def test_update_shielded_instance_config_rest_flattened(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -16271,11 +27604,8 @@ def test_update_network_interface_unary_rest_flattened(): project="project_value", zone="zone_value", instance="instance_value", - network_interface="network_interface_value", - network_interface_resource=compute.NetworkInterface( - access_configs=[ - compute.AccessConfig(external_ipv6="external_ipv6_value") - ] + shielded_instance_config_resource=compute.ShieldedInstanceConfig( + enable_integrity_monitoring=True ), ) mock_args.update(sample_request) @@ -16288,20 +27618,20 @@ def test_update_network_interface_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_network_interface_unary(**mock_args) + client.update_shielded_instance_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateNetworkInterface" + "%s/compute/v1/projects/{project}/zones/{zone}/instances/{instance}/updateShieldedInstanceConfig" % client.transport._host, args[1], ) -def test_update_network_interface_unary_rest_flattened_error(transport: str = "rest"): +def test_update_shielded_instance_config_rest_flattened_error(transport: str = "rest"): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16310,21 +27640,18 @@ def test_update_network_interface_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_network_interface_unary( - compute.UpdateNetworkInterfaceInstanceRequest(), + client.update_shielded_instance_config( + compute.UpdateShieldedInstanceConfigInstanceRequest(), project="project_value", zone="zone_value", instance="instance_value", - network_interface="network_interface_value", - network_interface_resource=compute.NetworkInterface( - access_configs=[ - compute.AccessConfig(external_ipv6="external_ipv6_value") - ] + shielded_instance_config_resource=compute.ShieldedInstanceConfig( + enable_integrity_monitoring=True ), ) -def test_update_network_interface_unary_rest_error(): +def test_update_shielded_instance_config_rest_error(): client = InstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -16390,28 +27717,6 @@ def test_update_shielded_instance_config_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_shielded_instance_config_unary_rest_required_fields( @@ -16750,6 +28055,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InstancesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_instances_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -16825,6 +28143,14 @@ def test_instances_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_instances_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_interconnect_attachments.py b/tests/unit/gapic/compute_v1/test_interconnect_attachments.py index 00689d0d9..f4ca55dd5 100644 --- a/tests/unit/gapic/compute_v1/test_interconnect_attachments.py +++ b/tests/unit/gapic/compute_v1/test_interconnect_attachments.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -923,7 +925,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -971,10 +973,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -999,7 +1001,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteInterconnectAttachmentRequest, ): transport_class = transports.InterconnectAttachmentsRestTransport @@ -1074,14 +1076,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1100,7 +1102,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1140,7 +1142,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1152,7 +1154,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteInterconnectAttachmentRequest ): client = InterconnectAttachmentsClient( @@ -1177,10 +1179,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1214,7 +1216,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1227,7 +1229,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1236,7 +1238,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteInterconnectAttachmentRequest(), project="project_value", region="region_value", @@ -1244,7 +1246,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1253,11 +1255,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetInterconnectAttachmentRequest, + compute.DeleteInterconnectAttachmentRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1274,95 +1276,45 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InterconnectAttachment( - admin_enabled=True, - bandwidth="bandwidth_value", - candidate_ipv6_subnets=["candidate_ipv6_subnets_value"], - candidate_subnets=["candidate_subnets_value"], - cloud_router_ip_address="cloud_router_ip_address_value", - cloud_router_ipv6_address="cloud_router_ipv6_address_value", - cloud_router_ipv6_interface_id="cloud_router_ipv6_interface_id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - customer_router_ip_address="customer_router_ip_address_value", - customer_router_ipv6_address="customer_router_ipv6_address_value", - customer_router_ipv6_interface_id="customer_router_ipv6_interface_id_value", - dataplane_version=1807, description="description_value", - edge_availability_domain="edge_availability_domain_value", - encryption="encryption_value", - google_reference_id="google_reference_id_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - interconnect="interconnect_value", - ipsec_internal_addresses=["ipsec_internal_addresses_value"], + insert_time="insert_time_value", kind="kind_value", - mtu=342, name="name_value", - operational_status="operational_status_value", - pairing_key="pairing_key_value", - partner_asn=1181, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - router="router_value", - satisfies_pzs=True, self_link="self_link_value", - stack_type="stack_type_value", - state="state_value", - type_="type__value", - vlan_tag8021q=1160, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectAttachment.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InterconnectAttachment) - assert response.admin_enabled is True - assert response.bandwidth == "bandwidth_value" - assert response.candidate_ipv6_subnets == ["candidate_ipv6_subnets_value"] - assert response.candidate_subnets == ["candidate_subnets_value"] - assert response.cloud_router_ip_address == "cloud_router_ip_address_value" - assert response.cloud_router_ipv6_address == "cloud_router_ipv6_address_value" - assert ( - response.cloud_router_ipv6_interface_id - == "cloud_router_ipv6_interface_id_value" - ) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.customer_router_ip_address == "customer_router_ip_address_value" - assert response.customer_router_ipv6_address == "customer_router_ipv6_address_value" - assert ( - response.customer_router_ipv6_interface_id - == "customer_router_ipv6_interface_id_value" - ) - assert response.dataplane_version == 1807 - assert response.description == "description_value" - assert response.edge_availability_domain == "edge_availability_domain_value" - assert response.encryption == "encryption_value" - assert response.google_reference_id == "google_reference_id_value" - assert response.id == 205 - assert response.interconnect == "interconnect_value" - assert response.ipsec_internal_addresses == ["ipsec_internal_addresses_value"] - assert response.kind == "kind_value" - assert response.mtu == 342 - assert response.name == "name_value" - assert response.operational_status == "operational_status_value" - assert response.pairing_key == "pairing_key_value" - assert response.partner_asn == 1181 - assert response.region == "region_value" - assert response.router == "router_value" - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.stack_type == "stack_type_value" - assert response.state == "state_value" - assert response.type_ == "type__value" - assert response.vlan_tag8021q == 1160 + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetInterconnectAttachmentRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteInterconnectAttachmentRequest, ): transport_class = transports.InterconnectAttachmentsRestTransport @@ -1381,7 +1333,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1392,7 +1344,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1412,7 +1366,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InterconnectAttachment() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1423,32 +1377,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectAttachment.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "interconnectAttachment", @@ -1460,7 +1414,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1473,9 +1427,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectAttachmentsRestInterceptor, "post_get" + transports.InterconnectAttachmentsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InterconnectAttachmentsRestInterceptor, "pre_get" + transports.InterconnectAttachmentsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1490,19 +1444,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InterconnectAttachment.to_json( - compute.InterconnectAttachment() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetInterconnectAttachmentRequest() + request = compute.DeleteInterconnectAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectAttachment + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1514,8 +1466,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetInterconnectAttachmentRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInterconnectAttachmentRequest ): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1539,10 +1491,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1551,7 +1503,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InterconnectAttachment() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1571,12 +1523,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectAttachment.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1589,7 +1541,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1598,15 +1550,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetInterconnectAttachmentRequest(), + client.delete_unary( + compute.DeleteInterconnectAttachmentRequest(), project="project_value", region="region_value", interconnect_attachment="interconnect_attachment_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1615,135 +1567,121 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertInterconnectAttachmentRequest, + compute.GetInterconnectAttachmentRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["interconnect_attachment_resource"] = { - "admin_enabled": True, - "bandwidth": "bandwidth_value", - "candidate_ipv6_subnets": [ - "candidate_ipv6_subnets_value_1", - "candidate_ipv6_subnets_value_2", - ], - "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], - "cloud_router_ip_address": "cloud_router_ip_address_value", - "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", - "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", - "creation_timestamp": "creation_timestamp_value", - "customer_router_ip_address": "customer_router_ip_address_value", - "customer_router_ipv6_address": "customer_router_ipv6_address_value", - "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", - "dataplane_version": 1807, - "description": "description_value", - "edge_availability_domain": "edge_availability_domain_value", - "encryption": "encryption_value", - "google_reference_id": "google_reference_id_value", - "id": 205, - "interconnect": "interconnect_value", - "ipsec_internal_addresses": [ - "ipsec_internal_addresses_value_1", - "ipsec_internal_addresses_value_2", - ], - "kind": "kind_value", - "mtu": 342, - "name": "name_value", - "operational_status": "operational_status_value", - "pairing_key": "pairing_key_value", - "partner_asn": 1181, - "partner_metadata": { - "interconnect_name": "interconnect_name_value", - "partner_name": "partner_name_value", - "portal_url": "portal_url_value", - }, - "private_interconnect_info": {"tag8021q": 632}, - "region": "region_value", - "router": "router_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "stack_type": "stack_type_value", - "state": "state_value", - "type_": "type__value", - "vlan_tag8021q": 1160, + request_init = { + "project": "sample1", + "region": "sample2", + "interconnect_attachment": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.InterconnectAttachment( + admin_enabled=True, + bandwidth="bandwidth_value", + candidate_ipv6_subnets=["candidate_ipv6_subnets_value"], + candidate_subnets=["candidate_subnets_value"], + cloud_router_ip_address="cloud_router_ip_address_value", + cloud_router_ipv6_address="cloud_router_ipv6_address_value", + cloud_router_ipv6_interface_id="cloud_router_ipv6_interface_id_value", creation_timestamp="creation_timestamp_value", + customer_router_ip_address="customer_router_ip_address_value", + customer_router_ipv6_address="customer_router_ipv6_address_value", + customer_router_ipv6_interface_id="customer_router_ipv6_interface_id_value", + dataplane_version=1807, description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + edge_availability_domain="edge_availability_domain_value", + encryption="encryption_value", + google_reference_id="google_reference_id_value", id=205, - insert_time="insert_time_value", + interconnect="interconnect_value", + ipsec_internal_addresses=["ipsec_internal_addresses_value"], kind="kind_value", + mtu=342, name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + operational_status="operational_status_value", + pairing_key="pairing_key_value", + partner_asn=1181, region="region_value", + router="router_value", + satisfies_pzs=True, self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + stack_type="stack_type_value", + state="state_value", + type_="type__value", + vlan_tag8021q=1160, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InterconnectAttachment.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.InterconnectAttachment) + assert response.admin_enabled is True + assert response.bandwidth == "bandwidth_value" + assert response.candidate_ipv6_subnets == ["candidate_ipv6_subnets_value"] + assert response.candidate_subnets == ["candidate_subnets_value"] + assert response.cloud_router_ip_address == "cloud_router_ip_address_value" + assert response.cloud_router_ipv6_address == "cloud_router_ipv6_address_value" + assert ( + response.cloud_router_ipv6_interface_id + == "cloud_router_ipv6_interface_id_value" + ) assert response.creation_timestamp == "creation_timestamp_value" + assert response.customer_router_ip_address == "customer_router_ip_address_value" + assert response.customer_router_ipv6_address == "customer_router_ipv6_address_value" + assert ( + response.customer_router_ipv6_interface_id + == "customer_router_ipv6_interface_id_value" + ) + assert response.dataplane_version == 1807 assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.edge_availability_domain == "edge_availability_domain_value" + assert response.encryption == "encryption_value" + assert response.google_reference_id == "google_reference_id_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.interconnect == "interconnect_value" + assert response.ipsec_internal_addresses == ["ipsec_internal_addresses_value"] assert response.kind == "kind_value" + assert response.mtu == 342 assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.operational_status == "operational_status_value" + assert response.pairing_key == "pairing_key_value" + assert response.partner_asn == 1181 assert response.region == "region_value" + assert response.router == "router_value" + assert response.satisfies_pzs is True assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.stack_type == "stack_type_value" + assert response.state == "state_value" + assert response.type_ == "type__value" + assert response.vlan_tag8021q == 1160 -def test_insert_unary_rest_required_fields( - request_type=compute.InsertInterconnectAttachmentRequest, +def test_get_rest_required_fields( + request_type=compute.GetInterconnectAttachmentRequest, ): transport_class = transports.InterconnectAttachmentsRestTransport request_init = {} + request_init["interconnect_attachment"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1757,27 +1695,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["interconnectAttachment"] = "interconnect_attachment_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "validate_only", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "interconnectAttachment" in jsonified_request + assert ( + jsonified_request["interconnectAttachment"] == "interconnect_attachment_value" + ) assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1790,7 +1726,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InterconnectAttachment() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1801,41 +1737,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InterconnectAttachment.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "validateOnly", - ) - ) + set(()) & set( ( - "interconnectAttachmentResource", + "interconnectAttachment", "project", "region", ) @@ -1844,7 +1774,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1857,9 +1787,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectAttachmentsRestInterceptor, "post_insert" + transports.InterconnectAttachmentsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.InterconnectAttachmentsRestInterceptor, "pre_insert" + transports.InterconnectAttachmentsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1874,17 +1804,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InterconnectAttachment.to_json( + compute.InterconnectAttachment() + ) - request = compute.InsertInterconnectAttachmentRequest() + request = compute.GetInterconnectAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InterconnectAttachment - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1896,8 +1828,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertInterconnectAttachmentRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetInterconnectAttachmentRequest ): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1905,53 +1837,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["interconnect_attachment_resource"] = { - "admin_enabled": True, - "bandwidth": "bandwidth_value", - "candidate_ipv6_subnets": [ - "candidate_ipv6_subnets_value_1", - "candidate_ipv6_subnets_value_2", - ], - "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], - "cloud_router_ip_address": "cloud_router_ip_address_value", - "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", - "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", - "creation_timestamp": "creation_timestamp_value", - "customer_router_ip_address": "customer_router_ip_address_value", - "customer_router_ipv6_address": "customer_router_ipv6_address_value", - "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", - "dataplane_version": 1807, - "description": "description_value", - "edge_availability_domain": "edge_availability_domain_value", - "encryption": "encryption_value", - "google_reference_id": "google_reference_id_value", - "id": 205, - "interconnect": "interconnect_value", - "ipsec_internal_addresses": [ - "ipsec_internal_addresses_value_1", - "ipsec_internal_addresses_value_2", - ], - "kind": "kind_value", - "mtu": 342, - "name": "name_value", - "operational_status": "operational_status_value", - "pairing_key": "pairing_key_value", - "partner_asn": 1181, - "partner_metadata": { - "interconnect_name": "interconnect_name_value", - "partner_name": "partner_name_value", - "portal_url": "portal_url_value", - }, - "private_interconnect_info": {"tag8021q": 632}, - "region": "region_value", - "router": "router_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "stack_type": "stack_type_value", - "state": "state_value", - "type_": "type__value", - "vlan_tag8021q": 1160, + request_init = { + "project": "sample1", + "region": "sample2", + "interconnect_attachment": "sample3", } request = request_type(request_init) @@ -1964,10 +1853,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1976,43 +1865,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InterconnectAttachment() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "interconnect_attachment": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - interconnect_attachment_resource=compute.InterconnectAttachment( - admin_enabled=True - ), + interconnect_attachment="interconnect_attachment_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InterconnectAttachment.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments" + "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments/{interconnect_attachment}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2021,17 +1912,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertInterconnectAttachmentRequest(), + client.get( + compute.GetInterconnectAttachmentRequest(), project="project_value", region="region_value", - interconnect_attachment_resource=compute.InterconnectAttachment( - admin_enabled=True - ), + interconnect_attachment="interconnect_attachment_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2040,11 +1929,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListInterconnectAttachmentsRequest, + compute.InsertInterconnectAttachmentRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2052,40 +1941,1308 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.InterconnectAttachmentList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.InterconnectAttachmentList.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + request_init["interconnect_attachment_resource"] = { + "admin_enabled": True, + "bandwidth": "bandwidth_value", + "candidate_ipv6_subnets": [ + "candidate_ipv6_subnets_value_1", + "candidate_ipv6_subnets_value_2", + ], + "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], + "cloud_router_ip_address": "cloud_router_ip_address_value", + "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", + "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", + "creation_timestamp": "creation_timestamp_value", + "customer_router_ip_address": "customer_router_ip_address_value", + "customer_router_ipv6_address": "customer_router_ipv6_address_value", + "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", + "dataplane_version": 1807, + "description": "description_value", + "edge_availability_domain": "edge_availability_domain_value", + "encryption": "encryption_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect": "interconnect_value", + "ipsec_internal_addresses": [ + "ipsec_internal_addresses_value_1", + "ipsec_internal_addresses_value_2", + ], + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "operational_status": "operational_status_value", + "pairing_key": "pairing_key_value", + "partner_asn": 1181, + "partner_metadata": { + "interconnect_name": "interconnect_name_value", + "partner_name": "partner_name_value", + "portal_url": "portal_url_value", + }, + "private_interconnect_info": {"tag8021q": 632}, + "region": "region_value", + "router": "router_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + "type_": "type__value", + "vlan_tag8021q": 1160, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertInterconnectAttachmentRequest, +): + transport_class = transports.InterconnectAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "validate_only", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "validateOnly", + ) + ) + & set( + ( + "interconnectAttachmentResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectAttachmentsRestInterceptor(), + ) + client = InterconnectAttachmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInterconnectAttachmentRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInterconnectAttachmentRequest +): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["interconnect_attachment_resource"] = { + "admin_enabled": True, + "bandwidth": "bandwidth_value", + "candidate_ipv6_subnets": [ + "candidate_ipv6_subnets_value_1", + "candidate_ipv6_subnets_value_2", + ], + "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], + "cloud_router_ip_address": "cloud_router_ip_address_value", + "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", + "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", + "creation_timestamp": "creation_timestamp_value", + "customer_router_ip_address": "customer_router_ip_address_value", + "customer_router_ipv6_address": "customer_router_ipv6_address_value", + "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", + "dataplane_version": 1807, + "description": "description_value", + "edge_availability_domain": "edge_availability_domain_value", + "encryption": "encryption_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect": "interconnect_value", + "ipsec_internal_addresses": [ + "ipsec_internal_addresses_value_1", + "ipsec_internal_addresses_value_2", + ], + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "operational_status": "operational_status_value", + "pairing_key": "pairing_key_value", + "partner_asn": 1181, + "partner_metadata": { + "interconnect_name": "interconnect_name_value", + "partner_name": "partner_name_value", + "portal_url": "portal_url_value", + }, + "private_interconnect_info": {"tag8021q": 632}, + "region": "region_value", + "router": "router_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + "type_": "type__value", + "vlan_tag8021q": 1160, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + interconnect_attachment_resource=compute.InterconnectAttachment( + admin_enabled=True + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertInterconnectAttachmentRequest(), + project="project_value", + region="region_value", + interconnect_attachment_resource=compute.InterconnectAttachment( + admin_enabled=True + ), + ) + + +def test_insert_rest_error(): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInterconnectAttachmentRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["interconnect_attachment_resource"] = { + "admin_enabled": True, + "bandwidth": "bandwidth_value", + "candidate_ipv6_subnets": [ + "candidate_ipv6_subnets_value_1", + "candidate_ipv6_subnets_value_2", + ], + "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], + "cloud_router_ip_address": "cloud_router_ip_address_value", + "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", + "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", + "creation_timestamp": "creation_timestamp_value", + "customer_router_ip_address": "customer_router_ip_address_value", + "customer_router_ipv6_address": "customer_router_ipv6_address_value", + "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", + "dataplane_version": 1807, + "description": "description_value", + "edge_availability_domain": "edge_availability_domain_value", + "encryption": "encryption_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect": "interconnect_value", + "ipsec_internal_addresses": [ + "ipsec_internal_addresses_value_1", + "ipsec_internal_addresses_value_2", + ], + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "operational_status": "operational_status_value", + "pairing_key": "pairing_key_value", + "partner_asn": 1181, + "partner_metadata": { + "interconnect_name": "interconnect_name_value", + "partner_name": "partner_name_value", + "portal_url": "portal_url_value", + }, + "private_interconnect_info": {"tag8021q": 632}, + "region": "region_value", + "router": "router_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + "type_": "type__value", + "vlan_tag8021q": 1160, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertInterconnectAttachmentRequest, +): + transport_class = transports.InterconnectAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "validate_only", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "validateOnly", + ) + ) + & set( + ( + "interconnectAttachmentResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectAttachmentsRestInterceptor(), + ) + client = InterconnectAttachmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInterconnectAttachmentRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInterconnectAttachmentRequest +): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["interconnect_attachment_resource"] = { + "admin_enabled": True, + "bandwidth": "bandwidth_value", + "candidate_ipv6_subnets": [ + "candidate_ipv6_subnets_value_1", + "candidate_ipv6_subnets_value_2", + ], + "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], + "cloud_router_ip_address": "cloud_router_ip_address_value", + "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", + "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", + "creation_timestamp": "creation_timestamp_value", + "customer_router_ip_address": "customer_router_ip_address_value", + "customer_router_ipv6_address": "customer_router_ipv6_address_value", + "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", + "dataplane_version": 1807, + "description": "description_value", + "edge_availability_domain": "edge_availability_domain_value", + "encryption": "encryption_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect": "interconnect_value", + "ipsec_internal_addresses": [ + "ipsec_internal_addresses_value_1", + "ipsec_internal_addresses_value_2", + ], + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "operational_status": "operational_status_value", + "pairing_key": "pairing_key_value", + "partner_asn": 1181, + "partner_metadata": { + "interconnect_name": "interconnect_name_value", + "partner_name": "partner_name_value", + "portal_url": "portal_url_value", + }, + "private_interconnect_info": {"tag8021q": 632}, + "region": "region_value", + "router": "router_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + "type_": "type__value", + "vlan_tag8021q": 1160, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + interconnect_attachment_resource=compute.InterconnectAttachment( + admin_enabled=True + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertInterconnectAttachmentRequest(), + project="project_value", + region="region_value", + interconnect_attachment_resource=compute.InterconnectAttachment( + admin_enabled=True + ), + ) + + +def test_insert_unary_rest_error(): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListInterconnectAttachmentsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InterconnectAttachmentList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InterconnectAttachmentList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListInterconnectAttachmentsRequest, +): + transport_class = transports.InterconnectAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InterconnectAttachmentList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InterconnectAttachmentList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectAttachmentsRestInterceptor(), + ) + client = InterconnectAttachmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InterconnectAttachmentList.to_json( + compute.InterconnectAttachmentList() + ) + + request = compute.ListInterconnectAttachmentsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InterconnectAttachmentList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListInterconnectAttachmentsRequest +): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InterconnectAttachmentList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InterconnectAttachmentList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListInterconnectAttachmentsRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InterconnectAttachmentList( + items=[ + compute.InterconnectAttachment(), + compute.InterconnectAttachment(), + compute.InterconnectAttachment(), + ], + next_page_token="abc", + ), + compute.InterconnectAttachmentList( + items=[], + next_page_token="def", + ), + compute.InterconnectAttachmentList( + items=[ + compute.InterconnectAttachment(), + ], + next_page_token="ghi", + ), + compute.InterconnectAttachmentList( + items=[ + compute.InterconnectAttachment(), + compute.InterconnectAttachment(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.InterconnectAttachmentList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InterconnectAttachment) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchInterconnectAttachmentRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "interconnect_attachment": "sample3", + } + request_init["interconnect_attachment_resource"] = { + "admin_enabled": True, + "bandwidth": "bandwidth_value", + "candidate_ipv6_subnets": [ + "candidate_ipv6_subnets_value_1", + "candidate_ipv6_subnets_value_2", + ], + "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], + "cloud_router_ip_address": "cloud_router_ip_address_value", + "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", + "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", + "creation_timestamp": "creation_timestamp_value", + "customer_router_ip_address": "customer_router_ip_address_value", + "customer_router_ipv6_address": "customer_router_ipv6_address_value", + "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", + "dataplane_version": 1807, + "description": "description_value", + "edge_availability_domain": "edge_availability_domain_value", + "encryption": "encryption_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect": "interconnect_value", + "ipsec_internal_addresses": [ + "ipsec_internal_addresses_value_1", + "ipsec_internal_addresses_value_2", + ], + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "operational_status": "operational_status_value", + "pairing_key": "pairing_key_value", + "partner_asn": 1181, + "partner_metadata": { + "interconnect_name": "interconnect_name_value", + "partner_name": "partner_name_value", + "portal_url": "portal_url_value", + }, + "private_interconnect_info": {"tag8021q": 632}, + "region": "region_value", + "router": "router_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + "type_": "type__value", + "vlan_tag8021q": 1160, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListInterconnectAttachmentsRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchInterconnectAttachmentRequest, ): transport_class = transports.InterconnectAttachmentsRestTransport request_init = {} + request_init["interconnect_attachment"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -2099,30 +3256,27 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["interconnectAttachment"] = "interconnect_attachment_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "interconnectAttachment" in jsonified_request + assert ( + jsonified_request["interconnectAttachment"] == "interconnect_attachment_value" + ) assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -2135,7 +3289,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InterconnectAttachmentList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2146,42 +3300,37 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectAttachmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "interconnectAttachment", + "interconnectAttachmentResource", "project", "region", ) @@ -2190,7 +3339,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.InterconnectAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2203,9 +3352,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectAttachmentsRestInterceptor, "post_list" + transports.InterconnectAttachmentsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.InterconnectAttachmentsRestInterceptor, "pre_list" + transports.InterconnectAttachmentsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2220,19 +3369,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InterconnectAttachmentList.to_json( - compute.InterconnectAttachmentList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListInterconnectAttachmentsRequest() + request = compute.PatchInterconnectAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectAttachmentList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -2244,8 +3391,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListInterconnectAttachmentsRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchInterconnectAttachmentRequest ): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2253,7 +3400,58 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "interconnect_attachment": "sample3", + } + request_init["interconnect_attachment_resource"] = { + "admin_enabled": True, + "bandwidth": "bandwidth_value", + "candidate_ipv6_subnets": [ + "candidate_ipv6_subnets_value_1", + "candidate_ipv6_subnets_value_2", + ], + "candidate_subnets": ["candidate_subnets_value_1", "candidate_subnets_value_2"], + "cloud_router_ip_address": "cloud_router_ip_address_value", + "cloud_router_ipv6_address": "cloud_router_ipv6_address_value", + "cloud_router_ipv6_interface_id": "cloud_router_ipv6_interface_id_value", + "creation_timestamp": "creation_timestamp_value", + "customer_router_ip_address": "customer_router_ip_address_value", + "customer_router_ipv6_address": "customer_router_ipv6_address_value", + "customer_router_ipv6_interface_id": "customer_router_ipv6_interface_id_value", + "dataplane_version": 1807, + "description": "description_value", + "edge_availability_domain": "edge_availability_domain_value", + "encryption": "encryption_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect": "interconnect_value", + "ipsec_internal_addresses": [ + "ipsec_internal_addresses_value_1", + "ipsec_internal_addresses_value_2", + ], + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "operational_status": "operational_status_value", + "pairing_key": "pairing_key_value", + "partner_asn": 1181, + "partner_metadata": { + "interconnect_name": "interconnect_name_value", + "partner_name": "partner_name_value", + "portal_url": "portal_url_value", + }, + "private_interconnect_info": {"tag8021q": 632}, + "region": "region_value", + "router": "router_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + "type_": "type__value", + "vlan_tag8021q": 1160, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2265,10 +3463,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2277,40 +3475,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InterconnectAttachmentList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "interconnect_attachment": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + interconnect_attachment="interconnect_attachment_value", + interconnect_attachment_resource=compute.InterconnectAttachment( + admin_enabled=True + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectAttachmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments" + "%s/compute/v1/projects/{project}/regions/{region}/interconnectAttachments/{interconnect_attachment}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2319,75 +3525,22 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListInterconnectAttachmentsRequest(), + client.patch( + compute.PatchInterconnectAttachmentRequest(), project="project_value", region="region_value", + interconnect_attachment="interconnect_attachment_value", + interconnect_attachment_resource=compute.InterconnectAttachment( + admin_enabled=True + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = InterconnectAttachmentsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InterconnectAttachmentList( - items=[ - compute.InterconnectAttachment(), - compute.InterconnectAttachment(), - compute.InterconnectAttachment(), - ], - next_page_token="abc", - ), - compute.InterconnectAttachmentList( - items=[], - next_page_token="def", - ), - compute.InterconnectAttachmentList( - items=[ - compute.InterconnectAttachment(), - ], - next_page_token="ghi", - ), - compute.InterconnectAttachmentList( - items=[ - compute.InterconnectAttachment(), - compute.InterconnectAttachment(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.InterconnectAttachmentList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InterconnectAttachment) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2495,28 +3648,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2900,6 +4031,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InterconnectAttachmentsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_interconnect_attachments_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2936,6 +4080,14 @@ def test_interconnect_attachments_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_interconnect_attachments_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_interconnect_locations.py b/tests/unit/gapic/compute_v1/test_interconnect_locations.py index d61089b4b..34fd40392 100644 --- a/tests/unit/gapic/compute_v1/test_interconnect_locations.py +++ b/tests/unit/gapic/compute_v1/test_interconnect_locations.py @@ -1261,6 +1261,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InterconnectLocationsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_interconnect_locations_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1293,6 +1306,14 @@ def test_interconnect_locations_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_interconnect_locations_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_interconnects.py b/tests/unit/gapic/compute_v1/test_interconnects.py index 2ddf5a644..9d07fefc2 100644 --- a/tests/unit/gapic/compute_v1/test_interconnects.py +++ b/tests/unit/gapic/compute_v1/test_interconnects.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -525,7 +527,7 @@ def test_interconnects_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -569,10 +571,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -597,9 +599,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteInterconnectRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteInterconnectRequest): transport_class = transports.InterconnectsRestTransport request_init = {} @@ -666,14 +666,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -691,7 +691,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -731,7 +731,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -743,7 +743,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteInterconnectRequest ): client = InterconnectsClient( @@ -764,10 +764,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -796,7 +796,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -809,7 +809,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -818,14 +818,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteInterconnectRequest(), project="project_value", interconnect="interconnect_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -834,11 +834,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetInterconnectRequest, + compute.DeleteInterconnectRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -851,64 +851,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Interconnect( - admin_enabled=True, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - customer_name="customer_name_value", description="description_value", - google_ip_address="google_ip_address_value", - google_reference_id="google_reference_id_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - interconnect_attachments=["interconnect_attachments_value"], - interconnect_type="interconnect_type_value", + insert_time="insert_time_value", kind="kind_value", - link_type="link_type_value", - location="location_value", name="name_value", - noc_contact_email="noc_contact_email_value", - operational_status="operational_status_value", - peer_ip_address="peer_ip_address_value", - provisioned_link_count=2375, - requested_link_count=2151, - satisfies_pzs=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - state="state_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Interconnect.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Interconnect) - assert response.admin_enabled is True - assert response.creation_timestamp == "creation_timestamp_value" - assert response.customer_name == "customer_name_value" - assert response.description == "description_value" - assert response.google_ip_address == "google_ip_address_value" - assert response.google_reference_id == "google_reference_id_value" - assert response.id == 205 - assert response.interconnect_attachments == ["interconnect_attachments_value"] - assert response.interconnect_type == "interconnect_type_value" - assert response.kind == "kind_value" - assert response.link_type == "link_type_value" - assert response.location == "location_value" - assert response.name == "name_value" - assert response.noc_contact_email == "noc_contact_email_value" - assert response.operational_status == "operational_status_value" - assert response.peer_ip_address == "peer_ip_address_value" - assert response.provisioned_link_count == 2375 - assert response.requested_link_count == 2151 - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.state == "state_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetInterconnectRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteInterconnectRequest, +): transport_class = transports.InterconnectsRestTransport request_init = {} @@ -925,7 +907,7 @@ def test_get_rest_required_fields(request_type=compute.GetInterconnectRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -935,7 +917,9 @@ def test_get_rest_required_fields(request_type=compute.GetInterconnectRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -951,7 +935,7 @@ def test_get_rest_required_fields(request_type=compute.GetInterconnectRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Interconnect() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -962,32 +946,32 @@ def test_get_rest_required_fields(request_type=compute.GetInterconnectRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Interconnect.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "interconnect", @@ -998,7 +982,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1011,9 +995,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectsRestInterceptor, "post_get" + transports.InterconnectsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.InterconnectsRestInterceptor, "pre_get" + transports.InterconnectsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1028,17 +1012,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Interconnect.to_json(compute.Interconnect()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetInterconnectRequest() + request = compute.DeleteInterconnectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Interconnect + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1050,8 +1034,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetInterconnectRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteInterconnectRequest ): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1071,10 +1055,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1083,7 +1067,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Interconnect() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "interconnect": "sample2"} @@ -1098,12 +1082,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Interconnect.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1116,7 +1100,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1125,14 +1109,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetInterconnectRequest(), + client.delete_unary( + compute.DeleteInterconnectRequest(), project="project_value", interconnect="interconnect_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1141,11 +1125,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetDiagnosticsInterconnectRequest, + compute.GetInterconnectRequest, dict, ], ) -def test_get_diagnostics_rest(request_type): +def test_get_rest(request_type): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1158,25 +1142,64 @@ def test_get_diagnostics_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InterconnectsGetDiagnosticsResponse() + return_value = compute.Interconnect( + admin_enabled=True, + creation_timestamp="creation_timestamp_value", + customer_name="customer_name_value", + description="description_value", + google_ip_address="google_ip_address_value", + google_reference_id="google_reference_id_value", + id=205, + interconnect_attachments=["interconnect_attachments_value"], + interconnect_type="interconnect_type_value", + kind="kind_value", + link_type="link_type_value", + location="location_value", + name="name_value", + noc_contact_email="noc_contact_email_value", + operational_status="operational_status_value", + peer_ip_address="peer_ip_address_value", + provisioned_link_count=2375, + requested_link_count=2151, + satisfies_pzs=True, + self_link="self_link_value", + state="state_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectsGetDiagnosticsResponse.to_json( - return_value - ) + json_return_value = compute.Interconnect.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_diagnostics(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InterconnectsGetDiagnosticsResponse) + assert isinstance(response, compute.Interconnect) + assert response.admin_enabled is True + assert response.creation_timestamp == "creation_timestamp_value" + assert response.customer_name == "customer_name_value" + assert response.description == "description_value" + assert response.google_ip_address == "google_ip_address_value" + assert response.google_reference_id == "google_reference_id_value" + assert response.id == 205 + assert response.interconnect_attachments == ["interconnect_attachments_value"] + assert response.interconnect_type == "interconnect_type_value" + assert response.kind == "kind_value" + assert response.link_type == "link_type_value" + assert response.location == "location_value" + assert response.name == "name_value" + assert response.noc_contact_email == "noc_contact_email_value" + assert response.operational_status == "operational_status_value" + assert response.peer_ip_address == "peer_ip_address_value" + assert response.provisioned_link_count == 2375 + assert response.requested_link_count == 2151 + assert response.satisfies_pzs is True + assert response.self_link == "self_link_value" + assert response.state == "state_value" -def test_get_diagnostics_rest_required_fields( - request_type=compute.GetDiagnosticsInterconnectRequest, -): +def test_get_rest_required_fields(request_type=compute.GetInterconnectRequest): transport_class = transports.InterconnectsRestTransport request_init = {} @@ -1193,7 +1216,7 @@ def test_get_diagnostics_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_diagnostics._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1203,7 +1226,7 @@ def test_get_diagnostics_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_diagnostics._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1219,7 +1242,7 @@ def test_get_diagnostics_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InterconnectsGetDiagnosticsResponse() + return_value = compute.Interconnect() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1237,25 +1260,23 @@ def test_get_diagnostics_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectsGetDiagnosticsResponse.to_json( - return_value - ) + json_return_value = compute.Interconnect.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_diagnostics(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_diagnostics_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_diagnostics._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( @@ -1268,7 +1289,7 @@ def test_get_diagnostics_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_diagnostics_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1281,9 +1302,9 @@ def test_get_diagnostics_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectsRestInterceptor, "post_get_diagnostics" + transports.InterconnectsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.InterconnectsRestInterceptor, "pre_get_diagnostics" + transports.InterconnectsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1298,19 +1319,17 @@ def test_get_diagnostics_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InterconnectsGetDiagnosticsResponse.to_json( - compute.InterconnectsGetDiagnosticsResponse() - ) + req.return_value._content = compute.Interconnect.to_json(compute.Interconnect()) - request = compute.GetDiagnosticsInterconnectRequest() + request = compute.GetInterconnectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectsGetDiagnosticsResponse + post.return_value = compute.Interconnect - client.get_diagnostics( + client.get( request, metadata=[ ("key", "val"), @@ -1322,8 +1341,8 @@ def test_get_diagnostics_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_diagnostics_rest_bad_request( - transport: str = "rest", request_type=compute.GetDiagnosticsInterconnectRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetInterconnectRequest ): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1343,10 +1362,10 @@ def test_get_diagnostics_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_diagnostics(request) + client.get(request) -def test_get_diagnostics_rest_flattened(): +def test_get_rest_flattened(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1355,7 +1374,7 @@ def test_get_diagnostics_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InterconnectsGetDiagnosticsResponse() + return_value = compute.Interconnect() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "interconnect": "sample2"} @@ -1370,27 +1389,25 @@ def test_get_diagnostics_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectsGetDiagnosticsResponse.to_json( - return_value - ) + json_return_value = compute.Interconnect.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_diagnostics(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/interconnects/{interconnect}/getDiagnostics" + "%s/compute/v1/projects/{project}/global/interconnects/{interconnect}" % client.transport._host, args[1], ) -def test_get_diagnostics_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1399,14 +1416,14 @@ def test_get_diagnostics_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_diagnostics( - compute.GetDiagnosticsInterconnectRequest(), + client.get( + compute.GetInterconnectRequest(), project="project_value", interconnect="interconnect_value", ) -def test_get_diagnostics_rest_error(): +def test_get_rest_error(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1415,136 +1432,46 @@ def test_get_diagnostics_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertInterconnectRequest, + compute.GetDiagnosticsInterconnectRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_diagnostics_rest(request_type): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["interconnect_resource"] = { - "admin_enabled": True, - "circuit_infos": [ - { - "customer_demarc_id": "customer_demarc_id_value", - "google_circuit_id": "google_circuit_id_value", - "google_demarc_id": "google_demarc_id_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "customer_name": "customer_name_value", - "description": "description_value", - "expected_outages": [ - { - "affected_circuits": [ - "affected_circuits_value_1", - "affected_circuits_value_2", - ], - "description": "description_value", - "end_time": 837, - "issue_type": "issue_type_value", - "name": "name_value", - "source": "source_value", - "start_time": 1084, - "state": "state_value", - } - ], - "google_ip_address": "google_ip_address_value", - "google_reference_id": "google_reference_id_value", - "id": 205, - "interconnect_attachments": [ - "interconnect_attachments_value_1", - "interconnect_attachments_value_2", - ], - "interconnect_type": "interconnect_type_value", - "kind": "kind_value", - "link_type": "link_type_value", - "location": "location_value", - "name": "name_value", - "noc_contact_email": "noc_contact_email_value", - "operational_status": "operational_status_value", - "peer_ip_address": "peer_ip_address_value", - "provisioned_link_count": 2375, - "requested_link_count": 2151, - "satisfies_pzs": True, - "self_link": "self_link_value", - "state": "state_value", - } + request_init = {"project": "sample1", "interconnect": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", - ) + return_value = compute.InterconnectsGetDiagnosticsResponse() # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InterconnectsGetDiagnosticsResponse.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_diagnostics(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.InterconnectsGetDiagnosticsResponse) -def test_insert_unary_rest_required_fields( - request_type=compute.InsertInterconnectRequest, +def test_get_diagnostics_rest_required_fields( + request_type=compute.GetDiagnosticsInterconnectRequest, ): transport_class = transports.InterconnectsRestTransport request_init = {} + request_init["interconnect"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1557,21 +1484,22 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_diagnostics._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["interconnect"] = "interconnect_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get_diagnostics._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "interconnect" in jsonified_request + assert jsonified_request["interconnect"] == "interconnect_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1582,7 +1510,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InterconnectsGetDiagnosticsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1593,36 +1521,37 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InterconnectsGetDiagnosticsResponse.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_diagnostics(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_diagnostics_rest_unset_required_fields(): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_diagnostics._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "interconnectResource", + "interconnect", "project", ) ) @@ -1630,7 +1559,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_diagnostics_rest_interceptors(null_interceptor): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1643,9 +1572,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectsRestInterceptor, "post_insert" + transports.InterconnectsRestInterceptor, "post_get_diagnostics" ) as post, mock.patch.object( - transports.InterconnectsRestInterceptor, "pre_insert" + transports.InterconnectsRestInterceptor, "pre_get_diagnostics" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1660,17 +1589,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InterconnectsGetDiagnosticsResponse.to_json( + compute.InterconnectsGetDiagnosticsResponse() + ) - request = compute.InsertInterconnectRequest() + request = compute.GetDiagnosticsInterconnectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InterconnectsGetDiagnosticsResponse - client.insert_unary( + client.get_diagnostics( request, metadata=[ ("key", "val"), @@ -1682,8 +1613,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertInterconnectRequest +def test_get_diagnostics_rest_bad_request( + transport: str = "rest", request_type=compute.GetDiagnosticsInterconnectRequest ): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1691,55 +1622,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["interconnect_resource"] = { - "admin_enabled": True, - "circuit_infos": [ - { - "customer_demarc_id": "customer_demarc_id_value", - "google_circuit_id": "google_circuit_id_value", - "google_demarc_id": "google_demarc_id_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "customer_name": "customer_name_value", - "description": "description_value", - "expected_outages": [ - { - "affected_circuits": [ - "affected_circuits_value_1", - "affected_circuits_value_2", - ], - "description": "description_value", - "end_time": 837, - "issue_type": "issue_type_value", - "name": "name_value", - "source": "source_value", - "start_time": 1084, - "state": "state_value", - } - ], - "google_ip_address": "google_ip_address_value", - "google_reference_id": "google_reference_id_value", - "id": 205, - "interconnect_attachments": [ - "interconnect_attachments_value_1", - "interconnect_attachments_value_2", - ], - "interconnect_type": "interconnect_type_value", - "kind": "kind_value", - "link_type": "link_type_value", - "location": "location_value", - "name": "name_value", - "noc_contact_email": "noc_contact_email_value", - "operational_status": "operational_status_value", - "peer_ip_address": "peer_ip_address_value", - "provisioned_link_count": 2375, - "requested_link_count": 2151, - "satisfies_pzs": True, - "self_link": "self_link_value", - "state": "state_value", - } + request_init = {"project": "sample1", "interconnect": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1751,10 +1634,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get_diagnostics(request) -def test_insert_unary_rest_flattened(): +def test_get_diagnostics_rest_flattened(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1763,40 +1646,42 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InterconnectsGetDiagnosticsResponse() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "interconnect": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - interconnect_resource=compute.Interconnect(admin_enabled=True), + interconnect="interconnect_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InterconnectsGetDiagnosticsResponse.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get_diagnostics(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/interconnects" + "%s/compute/v1/projects/{project}/global/interconnects/{interconnect}/getDiagnostics" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_diagnostics_rest_flattened_error(transport: str = "rest"): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1805,14 +1690,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertInterconnectRequest(), + client.get_diagnostics( + compute.GetDiagnosticsInterconnectRequest(), project="project_value", - interconnect_resource=compute.Interconnect(admin_enabled=True), + interconnect="interconnect_value", ) -def test_insert_unary_rest_error(): +def test_get_diagnostics_rest_error(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1821,11 +1706,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListInterconnectsRequest, + compute.InsertInterconnectRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1833,38 +1718,1248 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.InterconnectList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", + request_init["interconnect_resource"] = { + "admin_enabled": True, + "circuit_infos": [ + { + "customer_demarc_id": "customer_demarc_id_value", + "google_circuit_id": "google_circuit_id_value", + "google_demarc_id": "google_demarc_id_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "customer_name": "customer_name_value", + "description": "description_value", + "expected_outages": [ + { + "affected_circuits": [ + "affected_circuits_value_1", + "affected_circuits_value_2", + ], + "description": "description_value", + "end_time": 837, + "issue_type": "issue_type_value", + "name": "name_value", + "source": "source_value", + "start_time": 1084, + "state": "state_value", + } + ], + "google_ip_address": "google_ip_address_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect_attachments": [ + "interconnect_attachments_value_1", + "interconnect_attachments_value_2", + ], + "interconnect_type": "interconnect_type_value", + "kind": "kind_value", + "link_type": "link_type_value", + "location": "location_value", + "name": "name_value", + "noc_contact_email": "noc_contact_email_value", + "operational_status": "operational_status_value", + "peer_ip_address": "peer_ip_address_value", + "provisioned_link_count": 2375, + "requested_link_count": 2151, + "satisfies_pzs": True, + "self_link": "self_link_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertInterconnectRequest): + transport_class = transports.InterconnectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "interconnectResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectsRestInterceptor(), + ) + client = InterconnectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InterconnectsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InterconnectsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInterconnectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInterconnectRequest +): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["interconnect_resource"] = { + "admin_enabled": True, + "circuit_infos": [ + { + "customer_demarc_id": "customer_demarc_id_value", + "google_circuit_id": "google_circuit_id_value", + "google_demarc_id": "google_demarc_id_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "customer_name": "customer_name_value", + "description": "description_value", + "expected_outages": [ + { + "affected_circuits": [ + "affected_circuits_value_1", + "affected_circuits_value_2", + ], + "description": "description_value", + "end_time": 837, + "issue_type": "issue_type_value", + "name": "name_value", + "source": "source_value", + "start_time": 1084, + "state": "state_value", + } + ], + "google_ip_address": "google_ip_address_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect_attachments": [ + "interconnect_attachments_value_1", + "interconnect_attachments_value_2", + ], + "interconnect_type": "interconnect_type_value", + "kind": "kind_value", + "link_type": "link_type_value", + "location": "location_value", + "name": "name_value", + "noc_contact_email": "noc_contact_email_value", + "operational_status": "operational_status_value", + "peer_ip_address": "peer_ip_address_value", + "provisioned_link_count": 2375, + "requested_link_count": 2151, + "satisfies_pzs": True, + "self_link": "self_link_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + interconnect_resource=compute.Interconnect(admin_enabled=True), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/interconnects" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertInterconnectRequest(), + project="project_value", + interconnect_resource=compute.Interconnect(admin_enabled=True), + ) + + +def test_insert_rest_error(): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertInterconnectRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["interconnect_resource"] = { + "admin_enabled": True, + "circuit_infos": [ + { + "customer_demarc_id": "customer_demarc_id_value", + "google_circuit_id": "google_circuit_id_value", + "google_demarc_id": "google_demarc_id_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "customer_name": "customer_name_value", + "description": "description_value", + "expected_outages": [ + { + "affected_circuits": [ + "affected_circuits_value_1", + "affected_circuits_value_2", + ], + "description": "description_value", + "end_time": 837, + "issue_type": "issue_type_value", + "name": "name_value", + "source": "source_value", + "start_time": 1084, + "state": "state_value", + } + ], + "google_ip_address": "google_ip_address_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect_attachments": [ + "interconnect_attachments_value_1", + "interconnect_attachments_value_2", + ], + "interconnect_type": "interconnect_type_value", + "kind": "kind_value", + "link_type": "link_type_value", + "location": "location_value", + "name": "name_value", + "noc_contact_email": "noc_contact_email_value", + "operational_status": "operational_status_value", + "peer_ip_address": "peer_ip_address_value", + "provisioned_link_count": 2375, + "requested_link_count": 2151, + "satisfies_pzs": True, + "self_link": "self_link_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertInterconnectRequest, +): + transport_class = transports.InterconnectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "interconnectResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectsRestInterceptor(), + ) + client = InterconnectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InterconnectsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.InterconnectsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertInterconnectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertInterconnectRequest +): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["interconnect_resource"] = { + "admin_enabled": True, + "circuit_infos": [ + { + "customer_demarc_id": "customer_demarc_id_value", + "google_circuit_id": "google_circuit_id_value", + "google_demarc_id": "google_demarc_id_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "customer_name": "customer_name_value", + "description": "description_value", + "expected_outages": [ + { + "affected_circuits": [ + "affected_circuits_value_1", + "affected_circuits_value_2", + ], + "description": "description_value", + "end_time": 837, + "issue_type": "issue_type_value", + "name": "name_value", + "source": "source_value", + "start_time": 1084, + "state": "state_value", + } + ], + "google_ip_address": "google_ip_address_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect_attachments": [ + "interconnect_attachments_value_1", + "interconnect_attachments_value_2", + ], + "interconnect_type": "interconnect_type_value", + "kind": "kind_value", + "link_type": "link_type_value", + "location": "location_value", + "name": "name_value", + "noc_contact_email": "noc_contact_email_value", + "operational_status": "operational_status_value", + "peer_ip_address": "peer_ip_address_value", + "provisioned_link_count": 2375, + "requested_link_count": 2151, + "satisfies_pzs": True, + "self_link": "self_link_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + interconnect_resource=compute.Interconnect(admin_enabled=True), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/interconnects" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertInterconnectRequest(), + project="project_value", + interconnect_resource=compute.Interconnect(admin_enabled=True), + ) + + +def test_insert_unary_rest_error(): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListInterconnectsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InterconnectList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InterconnectList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListInterconnectsRequest): + transport_class = transports.InterconnectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.InterconnectList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InterconnectList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectsRestInterceptor(), + ) + client = InterconnectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.InterconnectsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.InterconnectsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.InterconnectList.to_json( + compute.InterconnectList() + ) + + request = compute.ListInterconnectsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.InterconnectList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListInterconnectsRequest +): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InterconnectList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InterconnectList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/interconnects" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListInterconnectsRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.InterconnectList( + items=[ + compute.Interconnect(), + compute.Interconnect(), + compute.Interconnect(), + ], + next_page_token="abc", + ), + compute.InterconnectList( + items=[], + next_page_token="def", + ), + compute.InterconnectList( + items=[ + compute.Interconnect(), + ], + next_page_token="ghi", + ), + compute.InterconnectList( + items=[ + compute.Interconnect(), + compute.Interconnect(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.InterconnectList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Interconnect) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchInterconnectRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "interconnect": "sample2"} + request_init["interconnect_resource"] = { + "admin_enabled": True, + "circuit_infos": [ + { + "customer_demarc_id": "customer_demarc_id_value", + "google_circuit_id": "google_circuit_id_value", + "google_demarc_id": "google_demarc_id_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "customer_name": "customer_name_value", + "description": "description_value", + "expected_outages": [ + { + "affected_circuits": [ + "affected_circuits_value_1", + "affected_circuits_value_2", + ], + "description": "description_value", + "end_time": 837, + "issue_type": "issue_type_value", + "name": "name_value", + "source": "source_value", + "start_time": 1084, + "state": "state_value", + } + ], + "google_ip_address": "google_ip_address_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect_attachments": [ + "interconnect_attachments_value_1", + "interconnect_attachments_value_2", + ], + "interconnect_type": "interconnect_type_value", + "kind": "kind_value", + "link_type": "link_type_value", + "location": "location_value", + "name": "name_value", + "noc_contact_email": "noc_contact_email_value", + "operational_status": "operational_status_value", + "peer_ip_address": "peer_ip_address_value", + "provisioned_link_count": 2375, + "requested_link_count": 2151, + "satisfies_pzs": True, + "self_link": "self_link_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListInterconnectsRequest): +def test_patch_rest_required_fields(request_type=compute.PatchInterconnectRequest): transport_class = transports.InterconnectsRestTransport request_init = {} + request_init["interconnect"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1877,29 +2972,24 @@ def test_list_rest_required_fields(request_type=compute.ListInterconnectsRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["interconnect"] = "interconnect_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "interconnect" in jsonified_request + assert jsonified_request["interconnect"] == "interconnect_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1910,7 +3000,7 @@ def test_list_rest_required_fields(request_type=compute.ListInterconnectsRequest request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InterconnectList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1921,46 +3011,45 @@ def test_list_rest_required_fields(request_type=compute.ListInterconnectsRequest # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "interconnect", + "interconnectResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1973,9 +3062,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.InterconnectsRestInterceptor, "post_list" + transports.InterconnectsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.InterconnectsRestInterceptor, "pre_list" + transports.InterconnectsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1990,19 +3079,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InterconnectList.to_json( - compute.InterconnectList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListInterconnectsRequest() + request = compute.PatchInterconnectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -2014,8 +3101,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListInterconnectsRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchInterconnectRequest ): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2023,7 +3110,55 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "interconnect": "sample2"} + request_init["interconnect_resource"] = { + "admin_enabled": True, + "circuit_infos": [ + { + "customer_demarc_id": "customer_demarc_id_value", + "google_circuit_id": "google_circuit_id_value", + "google_demarc_id": "google_demarc_id_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "customer_name": "customer_name_value", + "description": "description_value", + "expected_outages": [ + { + "affected_circuits": [ + "affected_circuits_value_1", + "affected_circuits_value_2", + ], + "description": "description_value", + "end_time": 837, + "issue_type": "issue_type_value", + "name": "name_value", + "source": "source_value", + "start_time": 1084, + "state": "state_value", + } + ], + "google_ip_address": "google_ip_address_value", + "google_reference_id": "google_reference_id_value", + "id": 205, + "interconnect_attachments": [ + "interconnect_attachments_value_1", + "interconnect_attachments_value_2", + ], + "interconnect_type": "interconnect_type_value", + "kind": "kind_value", + "link_type": "link_type_value", + "location": "location_value", + "name": "name_value", + "noc_contact_email": "noc_contact_email_value", + "operational_status": "operational_status_value", + "peer_ip_address": "peer_ip_address_value", + "provisioned_link_count": 2375, + "requested_link_count": 2151, + "satisfies_pzs": True, + "self_link": "self_link_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2035,10 +3170,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2047,39 +3182,41 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InterconnectList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "interconnect": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + interconnect="interconnect_value", + interconnect_resource=compute.Interconnect(admin_enabled=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InterconnectList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/interconnects" + "%s/compute/v1/projects/{project}/global/interconnects/{interconnect}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2088,72 +3225,19 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListInterconnectsRequest(), + client.patch( + compute.PatchInterconnectRequest(), project="project_value", + interconnect="interconnect_value", + interconnect_resource=compute.Interconnect(admin_enabled=True), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = InterconnectsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.InterconnectList( - items=[ - compute.Interconnect(), - compute.Interconnect(), - compute.Interconnect(), - ], - next_page_token="abc", - ), - compute.InterconnectList( - items=[], - next_page_token="def", - ), - compute.InterconnectList( - items=[ - compute.Interconnect(), - ], - next_page_token="ghi", - ), - compute.InterconnectList( - items=[ - compute.Interconnect(), - compute.Interconnect(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.InterconnectList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Interconnect) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2258,28 +3342,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2643,6 +3705,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = InterconnectsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_interconnects_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2679,6 +3754,14 @@ def test_interconnects_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_interconnects_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_license_codes.py b/tests/unit/gapic/compute_v1/test_license_codes.py index 3c7fdcb12..1522c08df 100644 --- a/tests/unit/gapic/compute_v1/test_license_codes.py +++ b/tests/unit/gapic/compute_v1/test_license_codes.py @@ -1149,6 +1149,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = LicenseCodesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_license_codes_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1181,6 +1194,14 @@ def test_license_codes_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_license_codes_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_licenses.py b/tests/unit/gapic/compute_v1/test_licenses.py index 1bc619985..8e24e60ee 100644 --- a/tests/unit/gapic/compute_v1/test_licenses.py +++ b/tests/unit/gapic/compute_v1/test_licenses.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -512,7 +514,7 @@ def test_licenses_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -556,10 +558,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -584,7 +586,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteLicenseRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteLicenseRequest): transport_class = transports.LicensesRestTransport request_init = {} @@ -659,7 +661,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteLicenseReq response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [ ( @@ -671,7 +673,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteLicenseReq assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.LicensesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -694,7 +696,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.LicensesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.LicensesRestInterceptor(), @@ -732,7 +734,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -744,7 +746,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteLicenseRequest ): client = LicensesClient( @@ -765,10 +767,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -797,7 +799,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -810,7 +812,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -819,14 +821,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteLicenseRequest(), project="project_value", license_="license__value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -835,11 +837,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetLicenseRequest, + compute.DeleteLicenseRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -852,40 +854,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.License( - charges_use_fee=True, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - license_code=1245, name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - transferable=True, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.License.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.License) - assert response.charges_use_fee is True - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.license_code == 1245 - assert response.name == "name_value" - assert response.self_link == "self_link_value" - assert response.transferable is True + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetLicenseRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteLicenseRequest): transport_class = transports.LicensesRestTransport request_init = {} @@ -903,7 +909,7 @@ def test_get_rest_required_fields(request_type=compute.GetLicenseRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -915,9 +921,14 @@ def test_get_rest_required_fields(request_type=compute.GetLicenseRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("license_",)) + assert not set(unset_fields) - set( + ( + "license_", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -933,7 +944,581 @@ def test_get_rest_required_fields(request_type=compute.GetLicenseRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.License() + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [ + ( + "license", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.LicensesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "license", + "requestId", + ) + ) + & set( + ( + "license", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.LicensesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.LicensesRestInterceptor(), + ) + client = LicensesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.LicensesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.LicensesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteLicenseRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteLicenseRequest +): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "license_": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "license_": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + license_="license__value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/licenses/{license_}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteLicenseRequest(), + project="project_value", + license_="license__value", + ) + + +def test_delete_unary_rest_error(): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetLicenseRequest, + dict, + ], +) +def test_get_rest(request_type): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "license_": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.License( + charges_use_fee=True, + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + license_code=1245, + name="name_value", + self_link="self_link_value", + transferable=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.License.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.License) + assert response.charges_use_fee is True + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.license_code == 1245 + assert response.name == "name_value" + assert response.self_link == "self_link_value" + assert response.transferable is True + + +def test_get_rest_required_fields(request_type=compute.GetLicenseRequest): + transport_class = transports.LicensesRestTransport + + request_init = {} + request_init["license_"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "license" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "license" in jsonified_request + assert jsonified_request["license"] == request_init["license_"] + + jsonified_request["license"] = "license__value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("license_",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "license" in jsonified_request + assert jsonified_request["license"] == "license__value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.License() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.License.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [ + ( + "license", + "", + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.LicensesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("license",)) + & set( + ( + "license", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.LicensesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.LicensesRestInterceptor(), + ) + client = LicensesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.LicensesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.LicensesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.License.to_json(compute.License()) + + request = compute.GetLicenseRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.License + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetLicenseRequest +): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "license_": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.License() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "license_": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + license_="license__value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.License.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/licenses/{license_}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetLicenseRequest(), + project="project_value", + license_="license__value", + ) + + +def test_get_rest_error(): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyLicenseRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyLicenseRequest, +): + transport_class = transports.LicensesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = LicensesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -951,41 +1536,36 @@ def test_get_rest_required_fields(request_type=compute.GetLicenseRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.License.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.get_iam_policy(request) - expected_params = [ - ( - "license", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.LicensesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("license",)) + set(("optionsRequestedPolicyVersion",)) & set( ( - "license", "project", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.LicensesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.LicensesRestInterceptor(), @@ -996,9 +1576,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.LicensesRestInterceptor, "post_get" + transports.LicensesRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.LicensesRestInterceptor, "pre_get" + transports.LicensesRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1013,17 +1593,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.License.to_json(compute.License()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.GetLicenseRequest() + request = compute.GetIamPolicyLicenseRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.License + post.return_value = compute.Policy - client.get( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -1035,8 +1615,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetLicenseRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyLicenseRequest ): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1044,7 +1624,7 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "license_": "sample2"} + request_init = {"project": "sample1", "resource": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1056,10 +1636,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.get_iam_policy(request) -def test_get_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1068,40 +1648,40 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.License() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "license_": "sample2"} + sample_request = {"project": "sample1", "resource": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - license_="license__value", + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.License.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/licenses/{license_}" + "%s/compute/v1/projects/{project}/global/licenses/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1110,14 +1690,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetLicenseRequest(), + client.get_iam_policy( + compute.GetIamPolicyLicenseRequest(), project="project_value", - license_="license__value", + resource="resource_value", ) -def test_get_rest_error(): +def test_get_iam_policy_rest_error(): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1126,52 +1706,99 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyLicenseRequest, + compute.InsertLicenseRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_insert_rest(request_type): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1"} + request_init["license_resource"] = { + "charges_use_fee": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "license_code": 1245, + "name": "name_value", + "resource_requirements": {"min_guest_cpu_count": 2042, "min_memory_mb": 1386}, + "self_link": "self_link_value", + "transferable": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyLicenseRequest, -): +def test_insert_rest_required_fields(request_type=compute.InsertLicenseRequest): transport_class = transports.LicensesRestTransport request_init = {} request_init["project"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1183,26 +1810,23 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1211,7 +1835,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1222,43 +1846,44 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.LicensesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "licenseResource", "project", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.LicensesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.LicensesRestInterceptor(), @@ -1269,9 +1894,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.LicensesRestInterceptor, "post_get_iam_policy" + transports.LicensesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.LicensesRestInterceptor, "pre_get_iam_policy" + transports.LicensesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1286,17 +1911,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyLicenseRequest() + request = compute.InsertLicenseRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.insert( request, metadata=[ ("key", "val"), @@ -1308,8 +1933,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyLicenseRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertLicenseRequest ): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1317,7 +1942,19 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1"} + request_init["license_resource"] = { + "charges_use_fee": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "license_code": 1245, + "name": "name_value", + "resource_requirements": {"min_guest_cpu_count": 2042, "min_memory_mb": 1386}, + "self_link": "self_link_value", + "transferable": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1329,10 +1966,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.insert(request) -def test_get_iam_policy_rest_flattened(): +def test_insert_rest_flattened(): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1341,40 +1978,39 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", + license_resource=compute.License(charges_use_fee=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/licenses/{resource}/getIamPolicy" - % client.transport._host, + "%s/compute/v1/projects/{project}/global/licenses" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1383,14 +2019,14 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyLicenseRequest(), + client.insert( + compute.InsertLicenseRequest(), project="project_value", - resource="resource_value", + license_resource=compute.License(charges_use_fee=True), ) -def test_get_iam_policy_rest_error(): +def test_insert_rest_error(): client = LicensesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1463,28 +2099,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields(request_type=compute.InsertLicenseRequest): @@ -2848,6 +3462,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = LicensesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_licenses_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2885,6 +3512,14 @@ def test_licenses_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_licenses_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_machine_images.py b/tests/unit/gapic/compute_v1/test_machine_images.py index eff0d59cc..5e9e70c41 100644 --- a/tests/unit/gapic/compute_v1/test_machine_images.py +++ b/tests/unit/gapic/compute_v1/test_machine_images.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -525,7 +527,7 @@ def test_machine_images_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -569,10 +571,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -597,9 +599,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteMachineImageRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteMachineImageRequest): transport_class = transports.MachineImagesRestTransport request_init = {} @@ -666,14 +666,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.MachineImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -691,7 +691,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.MachineImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -731,7 +731,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -743,7 +743,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteMachineImageRequest ): client = MachineImagesClient( @@ -764,10 +764,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -796,7 +796,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -809,7 +809,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -818,14 +818,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteMachineImageRequest(), project="project_value", machine_image="machine_image_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -834,11 +834,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetMachineImageRequest, + compute.DeleteMachineImageRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -851,46 +851,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.MachineImage( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - guest_flush=True, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - satisfies_pzs=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - source_instance="source_instance_value", - status="status_value", - storage_locations=["storage_locations_value"], - total_storage_bytes=2046, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.MachineImage.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.MachineImage) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.guest_flush is True - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.source_instance == "source_instance_value" - assert response.status == "status_value" - assert response.storage_locations == ["storage_locations_value"] - assert response.total_storage_bytes == 2046 + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetMachineImageRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteMachineImageRequest, +): transport_class = transports.MachineImagesRestTransport request_init = {} @@ -907,7 +907,7 @@ def test_get_rest_required_fields(request_type=compute.GetMachineImageRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -917,7 +917,9 @@ def test_get_rest_required_fields(request_type=compute.GetMachineImageRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -933,7 +935,7 @@ def test_get_rest_required_fields(request_type=compute.GetMachineImageRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.MachineImage() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -944,32 +946,32 @@ def test_get_rest_required_fields(request_type=compute.GetMachineImageRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.MachineImage.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.MachineImagesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "machineImage", @@ -980,7 +982,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.MachineImagesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -993,9 +995,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.MachineImagesRestInterceptor, "post_get" + transports.MachineImagesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.MachineImagesRestInterceptor, "pre_get" + transports.MachineImagesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1010,17 +1012,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.MachineImage.to_json(compute.MachineImage()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetMachineImageRequest() + request = compute.DeleteMachineImageRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.MachineImage + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1032,8 +1034,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetMachineImageRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteMachineImageRequest ): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1053,10 +1055,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1065,7 +1067,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.MachineImage() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "machine_image": "sample2"} @@ -1080,12 +1082,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.MachineImage.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1098,7 +1100,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1107,14 +1109,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetMachineImageRequest(), + client.delete_unary( + compute.DeleteMachineImageRequest(), project="project_value", machine_image="machine_image_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1123,52 +1125,68 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyMachineImageRequest, + compute.GetMachineImageRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "machine_image": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.MachineImage( + creation_timestamp="creation_timestamp_value", + description="description_value", + guest_flush=True, + id=205, + kind="kind_value", + name="name_value", + satisfies_pzs=True, + self_link="self_link_value", + source_instance="source_instance_value", + status="status_value", + storage_locations=["storage_locations_value"], + total_storage_bytes=2046, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.MachineImage.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.MachineImage) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.guest_flush is True + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.satisfies_pzs is True + assert response.self_link == "self_link_value" + assert response.source_instance == "source_instance_value" + assert response.status == "status_value" + assert response.storage_locations == ["storage_locations_value"] + assert response.total_storage_bytes == 2046 -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyMachineImageRequest, -): +def test_get_rest_required_fields(request_type=compute.GetMachineImageRequest): transport_class = transports.MachineImagesRestTransport request_init = {} + request_init["machine_image"] = "" request_init["project"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1180,26 +1198,24 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["machineImage"] = "machine_image_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "machineImage" in jsonified_request + assert jsonified_request["machineImage"] == "machine_image_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1208,7 +1224,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.MachineImage() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1222,101 +1238,1116 @@ def test_get_iam_policy_rest_required_fields( "method": "get", "query_params": request_init, } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.MachineImagesRestTransport( - credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) - & set( - ( - "project", - "resource", - ) - ) - ) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.MachineImagesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.MachineImagesRestInterceptor(), - ) - client = MachineImagesClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.MachineImagesRestInterceptor, "post_get_iam_policy" - ) as post, mock.patch.object( - transports.MachineImagesRestInterceptor, "pre_get_iam_policy" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": None, - "query_params": {}, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) - - request = compute.GetIamPolicyMachineImageRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = compute.Policy - - client.get_iam_policy( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.MachineImage.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.MachineImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "machineImage", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.MachineImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.MachineImagesRestInterceptor(), + ) + client = MachineImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.MachineImagesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.MachineImagesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.MachineImage.to_json(compute.MachineImage()) + + request = compute.GetMachineImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.MachineImage + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetMachineImageRequest +): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "machine_image": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.MachineImage() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "machine_image": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + machine_image="machine_image_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.MachineImage.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/machineImages/{machine_image}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetMachineImageRequest(), + project="project_value", + machine_image="machine_image_value", + ) + + +def test_get_rest_error(): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyMachineImageRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyMachineImageRequest, +): + transport_class = transports.MachineImagesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.MachineImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.MachineImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.MachineImagesRestInterceptor(), + ) + client = MachineImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.MachineImagesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.MachineImagesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyMachineImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyMachineImageRequest +): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "resource": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/machineImages/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyMachineImageRequest(), + project="project_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertMachineImageRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["machine_image_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "guest_flush": True, + "id": 205, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "kind": "kind_value", + "machine_image_encryption_key": {}, + "name": "name_value", + "satisfies_pzs": True, + "saved_disks": [ + { + "kind": "kind_value", + "source_disk": "source_disk_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + } + ], + "self_link": "self_link_value", + "source_disk_encryption_keys": [ + {"disk_encryption_key": {}, "source_disk": "source_disk_value"} + ], + "source_instance": "source_instance_value", + "source_instance_properties": { + "can_ip_forward": True, + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": {}, + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "guest_os_features": {}, + "index": 536, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "source": "source_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "type_": "type__value", + } + ], + "guest_accelerators": {}, + "labels": {}, + "machine_type": "machine_type_value", + "metadata": {}, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": {}, + "scheduling": {}, + "service_accounts": {}, + "tags": {}, + }, + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + "total_storage_bytes": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertMachineImageRequest): + transport_class = transports.MachineImagesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_instance", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.MachineImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceInstance", + ) + ) + & set( + ( + "machineImageResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.MachineImagesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.MachineImagesRestInterceptor(), + ) + client = MachineImagesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.MachineImagesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.MachineImagesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertMachineImageRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertMachineImageRequest +): + client = MachineImagesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["machine_image_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "guest_flush": True, + "id": 205, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "kind": "kind_value", + "machine_image_encryption_key": {}, + "name": "name_value", + "satisfies_pzs": True, + "saved_disks": [ + { + "kind": "kind_value", + "source_disk": "source_disk_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + } + ], + "self_link": "self_link_value", + "source_disk_encryption_keys": [ + {"disk_encryption_key": {}, "source_disk": "source_disk_value"} + ], + "source_instance": "source_instance_value", + "source_instance_properties": { + "can_ip_forward": True, + "deletion_protection": True, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": {}, + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "guest_os_features": {}, + "index": 536, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "source": "source_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "type_": "type__value", + } ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyMachineImageRequest -): - client = MachineImagesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + "guest_accelerators": {}, + "labels": {}, + "machine_type": "machine_type_value", + "metadata": {}, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": {}, + "scheduling": {}, + "service_accounts": {}, + "tags": {}, + }, + "status": "status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + "total_storage_bytes": 2046, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1328,10 +2359,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.insert(request) -def test_get_iam_policy_rest_flattened(): +def test_insert_rest_flattened(): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1340,40 +2371,42 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", + machine_image_resource=compute.MachineImage( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/machineImages/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/global/machineImages" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1382,14 +2415,16 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyMachineImageRequest(), + client.insert( + compute.InsertMachineImageRequest(), project="project_value", - resource="resource_value", + machine_image_resource=compute.MachineImage( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_iam_policy_rest_error(): +def test_insert_rest_error(): client = MachineImagesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1661,28 +2696,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -3273,6 +4286,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = MachineImagesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_machine_images_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3310,6 +4336,14 @@ def test_machine_images_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_machine_images_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_machine_types.py b/tests/unit/gapic/compute_v1/test_machine_types.py index 298497c69..6522ffa0e 100644 --- a/tests/unit/gapic/compute_v1/test_machine_types.py +++ b/tests/unit/gapic/compute_v1/test_machine_types.py @@ -1589,6 +1589,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = MachineTypesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_machine_types_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1622,6 +1635,14 @@ def test_machine_types_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_machine_types_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_network_edge_security_services.py b/tests/unit/gapic/compute_v1/test_network_edge_security_services.py index c07c55417..669684e96 100644 --- a/tests/unit/gapic/compute_v1/test_network_edge_security_services.py +++ b/tests/unit/gapic/compute_v1/test_network_edge_security_services.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -932,7 +934,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -980,10 +982,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1008,7 +1010,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteNetworkEdgeSecurityServiceRequest, ): transport_class = transports.NetworkEdgeSecurityServicesRestTransport @@ -1086,14 +1088,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.NetworkEdgeSecurityServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1112,7 +1114,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.NetworkEdgeSecurityServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1152,7 +1154,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1164,7 +1166,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteNetworkEdgeSecurityServiceRequest, ): @@ -1190,10 +1192,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1227,7 +1229,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1240,7 +1242,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1249,7 +1251,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteNetworkEdgeSecurityServiceRequest(), project="project_value", region="region_value", @@ -1257,7 +1259,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1266,11 +1268,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNetworkEdgeSecurityServiceRequest, + compute.DeleteNetworkEdgeSecurityServiceRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1287,48 +1289,1042 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEdgeSecurityService( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteNetworkEdgeSecurityServiceRequest, +): + transport_class = transports.NetworkEdgeSecurityServicesRestTransport + + request_init = {} + request_init["network_edge_security_service"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request[ + "networkEdgeSecurityService" + ] = "network_edge_security_service_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEdgeSecurityService" in jsonified_request + assert ( + jsonified_request["networkEdgeSecurityService"] + == "network_edge_security_service_value" + ) + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.NetworkEdgeSecurityServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkEdgeSecurityService", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.NetworkEdgeSecurityServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEdgeSecurityServicesRestInterceptor(), + ) + client = NetworkEdgeSecurityServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEdgeSecurityServicesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteNetworkEdgeSecurityServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteNetworkEdgeSecurityServiceRequest, +): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + network_edge_security_service="network_edge_security_service_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices/{network_edge_security_service}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteNetworkEdgeSecurityServiceRequest(), + project="project_value", + region="region_value", + network_edge_security_service="network_edge_security_service_value", + ) + + +def test_delete_unary_rest_error(): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetNetworkEdgeSecurityServiceRequest, + dict, + ], +) +def test_get_rest(request_type): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEdgeSecurityService( + creation_timestamp="creation_timestamp_value", + description="description_value", + fingerprint="fingerprint_value", + id=205, + kind="kind_value", + name="name_value", + region="region_value", + security_policy="security_policy_value", + self_link="self_link_value", + self_link_with_id="self_link_with_id_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEdgeSecurityService.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NetworkEdgeSecurityService) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.fingerprint == "fingerprint_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.region == "region_value" + assert response.security_policy == "security_policy_value" + assert response.self_link == "self_link_value" + assert response.self_link_with_id == "self_link_with_id_value" + + +def test_get_rest_required_fields( + request_type=compute.GetNetworkEdgeSecurityServiceRequest, +): + transport_class = transports.NetworkEdgeSecurityServicesRestTransport + + request_init = {} + request_init["network_edge_security_service"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request[ + "networkEdgeSecurityService" + ] = "network_edge_security_service_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEdgeSecurityService" in jsonified_request + assert ( + jsonified_request["networkEdgeSecurityService"] + == "network_edge_security_service_value" + ) + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEdgeSecurityService() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEdgeSecurityService.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.NetworkEdgeSecurityServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "networkEdgeSecurityService", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.NetworkEdgeSecurityServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEdgeSecurityServicesRestInterceptor(), + ) + client = NetworkEdgeSecurityServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEdgeSecurityServicesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NetworkEdgeSecurityService.to_json( + compute.NetworkEdgeSecurityService() + ) + + request = compute.GetNetworkEdgeSecurityServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NetworkEdgeSecurityService + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetNetworkEdgeSecurityServiceRequest +): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEdgeSecurityService() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + network_edge_security_service="network_edge_security_service_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEdgeSecurityService.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices/{network_edge_security_service}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetNetworkEdgeSecurityServiceRequest(), + project="project_value", + region="region_value", + network_edge_security_service="network_edge_security_service_value", + ) + + +def test_get_rest_error(): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertNetworkEdgeSecurityServiceRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["network_edge_security_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "security_policy": "security_policy_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertNetworkEdgeSecurityServiceRequest, +): + transport_class = transports.NetworkEdgeSecurityServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "validate_only", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.NetworkEdgeSecurityServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "validateOnly", + ) + ) + & set( + ( + "networkEdgeSecurityServiceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.NetworkEdgeSecurityServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEdgeSecurityServicesRestInterceptor(), + ) + client = NetworkEdgeSecurityServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEdgeSecurityServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertNetworkEdgeSecurityServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertNetworkEdgeSecurityServiceRequest, +): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["network_edge_security_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "security_policy": "security_policy_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + network_edge_security_service_resource=compute.NetworkEdgeSecurityService( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertNetworkEdgeSecurityServiceRequest(), + project="project_value", + region="region_value", + network_edge_security_service_resource=compute.NetworkEdgeSecurityService( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertNetworkEdgeSecurityServiceRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = NetworkEdgeSecurityServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["network_edge_security_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "security_policy": "security_policy_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - security_policy="security_policy_value", self_link="self_link_value", - self_link_with_id="self_link_with_id_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEdgeSecurityService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NetworkEdgeSecurityService) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.security_policy == "security_policy_value" - assert response.self_link == "self_link_value" - assert response.self_link_with_id == "self_link_with_id_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetNetworkEdgeSecurityServiceRequest, +def test_insert_unary_rest_required_fields( + request_type=compute.InsertNetworkEdgeSecurityServiceRequest, ): transport_class = transports.NetworkEdgeSecurityServicesRestTransport request_init = {} - request_init["network_edge_security_service"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1342,28 +2338,27 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request[ - "networkEdgeSecurityService" - ] = "network_edge_security_service_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "validate_only", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "networkEdgeSecurityService" in jsonified_request - assert ( - jsonified_request["networkEdgeSecurityService"] - == "network_edge_security_service_value" - ) assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1376,7 +2371,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NetworkEdgeSecurityService() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1387,35 +2382,41 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEdgeSecurityService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_unary_rest_unset_required_fields(): transport = transports.NetworkEdgeSecurityServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "requestId", + "validateOnly", + ) + ) & set( ( - "networkEdgeSecurityService", + "networkEdgeSecurityServiceResource", "project", "region", ) @@ -1424,7 +2425,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_unary_rest_interceptors(null_interceptor): transport = transports.NetworkEdgeSecurityServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1437,9 +2438,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkEdgeSecurityServicesRestInterceptor, "post_get" + transports.NetworkEdgeSecurityServicesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_get" + transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1454,19 +2455,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NetworkEdgeSecurityService.to_json( - compute.NetworkEdgeSecurityService() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetNetworkEdgeSecurityServiceRequest() + request = compute.InsertNetworkEdgeSecurityServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEdgeSecurityService + post.return_value = compute.Operation - client.get( + client.insert_unary( request, metadata=[ ("key", "val"), @@ -1478,8 +2477,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetNetworkEdgeSecurityServiceRequest +def test_insert_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertNetworkEdgeSecurityServiceRequest, ): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1487,10 +2487,18 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "network_edge_security_service": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["network_edge_security_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "security_policy": "security_policy_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", } request = request_type(request_init) @@ -1503,10 +2511,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert_unary(request) -def test_get_rest_flattened(): +def test_insert_unary_rest_flattened(): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1515,45 +2523,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEdgeSecurityService() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "network_edge_security_service": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - network_edge_security_service="network_edge_security_service_value", + network_edge_security_service_resource=compute.NetworkEdgeSecurityService( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEdgeSecurityService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices/{network_edge_security_service}" + "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_unary_rest_flattened_error(transport: str = "rest"): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1562,15 +2568,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetNetworkEdgeSecurityServiceRequest(), + client.insert_unary( + compute.InsertNetworkEdgeSecurityServiceRequest(), project="project_value", region="region_value", - network_edge_security_service="network_edge_security_service_value", + network_edge_security_service_resource=compute.NetworkEdgeSecurityService( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_rest_error(): +def test_insert_unary_rest_error(): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1579,18 +2587,22 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertNetworkEdgeSecurityServiceRequest, + compute.PatchNetworkEdgeSecurityServiceRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_patch_rest(request_type): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } request_init["network_edge_security_service_resource"] = { "creation_timestamp": "creation_timestamp_value", "description": "description_value", @@ -1639,10 +2651,10 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1667,12 +2679,13 @@ def test_insert_unary_rest(request_type): assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertNetworkEdgeSecurityServiceRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchNetworkEdgeSecurityServiceRequest, ): transport_class = transports.NetworkEdgeSecurityServicesRestTransport request_init = {} + request_init["network_edge_security_service"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1686,27 +2699,36 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request[ + "networkEdgeSecurityService" + ] = "network_edge_security_service_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( + "paths", "request_id", - "validate_only", + "update_mask", ) ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "networkEdgeSecurityService" in jsonified_request + assert ( + jsonified_request["networkEdgeSecurityService"] + == "network_edge_security_service_value" + ) assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1730,7 +2752,7 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -1742,28 +2764,30 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.NetworkEdgeSecurityServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( + "paths", "requestId", - "validateOnly", + "updateMask", ) ) & set( ( + "networkEdgeSecurityService", "networkEdgeSecurityServiceResource", "project", "region", @@ -1773,7 +2797,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.NetworkEdgeSecurityServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1786,9 +2810,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkEdgeSecurityServicesRestInterceptor, "post_insert" + transports.NetworkEdgeSecurityServicesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_insert" + transports.NetworkEdgeSecurityServicesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1805,7 +2829,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertNetworkEdgeSecurityServiceRequest() + request = compute.PatchNetworkEdgeSecurityServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1813,7 +2837,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.patch( request, metadata=[ ("key", "val"), @@ -1825,9 +2849,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.InsertNetworkEdgeSecurityServiceRequest, +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNetworkEdgeSecurityServiceRequest ): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1835,7 +2858,11 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } request_init["network_edge_security_service_resource"] = { "creation_timestamp": "creation_timestamp_value", "description": "description_value", @@ -1859,10 +2886,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1874,12 +2901,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "network_edge_security_service": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + network_edge_security_service="network_edge_security_service_value", network_edge_security_service_resource=compute.NetworkEdgeSecurityService( creation_timestamp="creation_timestamp_value" ), @@ -1894,20 +2926,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices" + "%s/compute/v1/projects/{project}/regions/{region}/networkEdgeSecurityServices/{network_edge_security_service}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1916,17 +2948,18 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertNetworkEdgeSecurityServiceRequest(), + client.patch( + compute.PatchNetworkEdgeSecurityServiceRequest(), project="project_value", region="region_value", + network_edge_security_service="network_edge_security_service_value", network_edge_security_service_resource=compute.NetworkEdgeSecurityService( creation_timestamp="creation_timestamp_value" ), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = NetworkEdgeSecurityServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2003,28 +3036,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2388,6 +3399,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NetworkEdgeSecurityServicesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_network_edge_security_services_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2423,6 +3447,14 @@ def test_network_edge_security_services_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_network_edge_security_services_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_network_endpoint_groups.py b/tests/unit/gapic/compute_v1/test_network_endpoint_groups.py index 9b612f6b1..2e19d2ca6 100644 --- a/tests/unit/gapic/compute_v1/test_network_endpoint_groups.py +++ b/tests/unit/gapic/compute_v1/test_network_endpoint_groups.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -919,7 +921,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_attach_network_endpoints_unary_rest(request_type): +def test_attach_network_endpoints_rest(request_type): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -978,10 +980,10 @@ def test_attach_network_endpoints_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.attach_network_endpoints_unary(request) + response = client.attach_network_endpoints(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1006,7 +1008,7 @@ def test_attach_network_endpoints_unary_rest(request_type): assert response.zone == "zone_value" -def test_attach_network_endpoints_unary_rest_required_fields( +def test_attach_network_endpoints_rest_required_fields( request_type=compute.AttachNetworkEndpointsNetworkEndpointGroupRequest, ): transport_class = transports.NetworkEndpointGroupsRestTransport @@ -1080,14 +1082,14 @@ def test_attach_network_endpoints_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.attach_network_endpoints_unary(request) + response = client.attach_network_endpoints(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_attach_network_endpoints_unary_rest_unset_required_fields(): +def test_attach_network_endpoints_rest_unset_required_fields(): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1107,7 +1109,7 @@ def test_attach_network_endpoints_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): +def test_attach_network_endpoints_rest_interceptors(null_interceptor): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1147,7 +1149,7 @@ def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.attach_network_endpoints_unary( + client.attach_network_endpoints( request, metadata=[ ("key", "val"), @@ -1159,7 +1161,7 @@ def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_attach_network_endpoints_unary_rest_bad_request( +def test_attach_network_endpoints_rest_bad_request( transport: str = "rest", request_type=compute.AttachNetworkEndpointsNetworkEndpointGroupRequest, ): @@ -1196,10 +1198,10 @@ def test_attach_network_endpoints_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.attach_network_endpoints_unary(request) + client.attach_network_endpoints(request) -def test_attach_network_endpoints_unary_rest_flattened(): +def test_attach_network_endpoints_rest_flattened(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1238,7 +1240,7 @@ def test_attach_network_endpoints_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.attach_network_endpoints_unary(**mock_args) + client.attach_network_endpoints(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1251,7 +1253,7 @@ def test_attach_network_endpoints_unary_rest_flattened(): ) -def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): +def test_attach_network_endpoints_rest_flattened_error(transport: str = "rest"): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1260,7 +1262,7 @@ def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.attach_network_endpoints_unary( + client.attach_network_endpoints( compute.AttachNetworkEndpointsNetworkEndpointGroupRequest(), project="project_value", zone="zone_value", @@ -1273,7 +1275,7 @@ def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "r ) -def test_attach_network_endpoints_unary_rest_error(): +def test_attach_network_endpoints_rest_error(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1282,11 +1284,11 @@ def test_attach_network_endpoints_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteNetworkEndpointGroupRequest, + compute.AttachNetworkEndpointsNetworkEndpointGroupRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_attach_network_endpoints_unary_rest(request_type): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1298,6 +1300,17 @@ def test_delete_unary_rest(request_type): "zone": "sample2", "network_endpoint_group": "sample3", } + request_init["network_endpoint_groups_attach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1334,36 +1347,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.attach_network_endpoints_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteNetworkEndpointGroupRequest, +def test_attach_network_endpoints_unary_rest_required_fields( + request_type=compute.AttachNetworkEndpointsNetworkEndpointGroupRequest, ): transport_class = transports.NetworkEndpointGroupsRestTransport @@ -1382,7 +1373,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).attach_network_endpoints._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1393,7 +1384,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).attach_network_endpoints._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1424,9 +1415,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1435,24 +1427,25 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.attach_network_endpoints_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_attach_network_endpoints_unary_rest_unset_required_fields(): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.attach_network_endpoints._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "networkEndpointGroup", + "networkEndpointGroupsAttachEndpointsRequestResource", "project", "zone", ) @@ -1461,7 +1454,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1474,9 +1467,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkEndpointGroupsRestInterceptor, "post_delete" + transports.NetworkEndpointGroupsRestInterceptor, "post_attach_network_endpoints" ) as post, mock.patch.object( - transports.NetworkEndpointGroupsRestInterceptor, "pre_delete" + transports.NetworkEndpointGroupsRestInterceptor, "pre_attach_network_endpoints" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1493,7 +1486,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteNetworkEndpointGroupRequest() + request = compute.AttachNetworkEndpointsNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1501,7 +1494,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.attach_network_endpoints_unary( request, metadata=[ ("key", "val"), @@ -1513,8 +1506,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteNetworkEndpointGroupRequest +def test_attach_network_endpoints_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.AttachNetworkEndpointsNetworkEndpointGroupRequest, ): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1527,6 +1521,17 @@ def test_delete_unary_rest_bad_request( "zone": "sample2", "network_endpoint_group": "sample3", } + request_init["network_endpoint_groups_attach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1538,10 +1543,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.attach_network_endpoints_unary(request) -def test_delete_unary_rest_flattened(): +def test_attach_network_endpoints_unary_rest_flattened(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1564,6 +1569,11 @@ def test_delete_unary_rest_flattened(): project="project_value", zone="zone_value", network_endpoint_group="network_endpoint_group_value", + network_endpoint_groups_attach_endpoints_request_resource=compute.NetworkEndpointGroupsAttachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), ) mock_args.update(sample_request) @@ -1575,20 +1585,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.attach_network_endpoints_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}" + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}/attachNetworkEndpoints" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_attach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1597,15 +1607,20 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteNetworkEndpointGroupRequest(), + client.attach_network_endpoints_unary( + compute.AttachNetworkEndpointsNetworkEndpointGroupRequest(), project="project_value", zone="zone_value", network_endpoint_group="network_endpoint_group_value", + network_endpoint_groups_attach_endpoints_request_resource=compute.NetworkEndpointGroupsAttachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), ) -def test_delete_unary_rest_error(): +def test_attach_network_endpoints_unary_rest_error(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1614,11 +1629,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, + compute.DeleteNetworkEndpointGroupRequest, dict, ], ) -def test_detach_network_endpoints_unary_rest(request_type): +def test_delete_rest(request_type): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1630,17 +1645,6 @@ def test_detach_network_endpoints_unary_rest(request_type): "zone": "sample2", "network_endpoint_group": "sample3", } - request_init["network_endpoint_groups_detach_endpoints_request_resource"] = { - "network_endpoints": [ - { - "annotations": {}, - "fqdn": "fqdn_value", - "instance": "instance_value", - "ip_address": "ip_address_value", - "port": 453, - } - ] - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1677,10 +1681,10 @@ def test_detach_network_endpoints_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.detach_network_endpoints_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1705,8 +1709,8 @@ def test_detach_network_endpoints_unary_rest(request_type): assert response.zone == "zone_value" -def test_detach_network_endpoints_unary_rest_required_fields( - request_type=compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, +def test_delete_rest_required_fields( + request_type=compute.DeleteNetworkEndpointGroupRequest, ): transport_class = transports.NetworkEndpointGroupsRestTransport @@ -1725,7 +1729,7 @@ def test_detach_network_endpoints_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1736,7 +1740,7 @@ def test_detach_network_endpoints_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1767,10 +1771,9 @@ def test_detach_network_endpoints_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1779,25 +1782,24 @@ def test_detach_network_endpoints_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.detach_network_endpoints_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_detach_network_endpoints_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.detach_network_endpoints._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "networkEndpointGroup", - "networkEndpointGroupsDetachEndpointsRequestResource", "project", "zone", ) @@ -1806,7 +1808,7 @@ def test_detach_network_endpoints_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1819,9 +1821,9 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkEndpointGroupsRestInterceptor, "post_detach_network_endpoints" + transports.NetworkEndpointGroupsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NetworkEndpointGroupsRestInterceptor, "pre_detach_network_endpoints" + transports.NetworkEndpointGroupsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1838,7 +1840,7 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DetachNetworkEndpointsNetworkEndpointGroupRequest() + request = compute.DeleteNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1846,7 +1848,7 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.detach_network_endpoints_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1858,9 +1860,8 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_detach_network_endpoints_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNetworkEndpointGroupRequest ): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1873,16 +1874,1341 @@ def test_detach_network_endpoints_unary_rest_bad_request( "zone": "sample2", "network_endpoint_group": "sample3", } - request_init["network_endpoint_groups_detach_endpoints_request_resource"] = { - "network_endpoints": [ - { - "annotations": {}, - "fqdn": "fqdn_value", - "instance": "instance_value", - "ip_address": "ip_address_value", - "port": 453, - } - ] + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteNetworkEndpointGroupRequest(), + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + ) + + +def test_delete_rest_error(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteNetworkEndpointGroupRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteNetworkEndpointGroupRequest, +): + transport_class = transports.NetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkEndpointGroup", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEndpointGroupsRestInterceptor(), + ) + client = NetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNetworkEndpointGroupRequest +): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteNetworkEndpointGroupRequest(), + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + ) + + +def test_delete_unary_rest_error(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, + dict, + ], +) +def test_detach_network_endpoints_rest(request_type): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request_init["network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.detach_network_endpoints(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_detach_network_endpoints_rest_required_fields( + request_type=compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, +): + transport_class = transports.NetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.detach_network_endpoints(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_detach_network_endpoints_rest_unset_required_fields(): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.detach_network_endpoints._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkEndpointGroup", + "networkEndpointGroupsDetachEndpointsRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_detach_network_endpoints_rest_interceptors(null_interceptor): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEndpointGroupsRestInterceptor(), + ) + client = NetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "post_detach_network_endpoints" + ) as post, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "pre_detach_network_endpoints" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DetachNetworkEndpointsNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.detach_network_endpoints( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_detach_network_endpoints_rest_bad_request( + transport: str = "rest", + request_type=compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, +): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request_init["network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.detach_network_endpoints(request) + + +def test_detach_network_endpoints_rest_flattened(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + network_endpoint_groups_detach_endpoints_request_resource=compute.NetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.detach_network_endpoints(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}/detachNetworkEndpoints" + % client.transport._host, + args[1], + ) + + +def test_detach_network_endpoints_rest_flattened_error(transport: str = "rest"): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.detach_network_endpoints( + compute.DetachNetworkEndpointsNetworkEndpointGroupRequest(), + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + network_endpoint_groups_detach_endpoints_request_resource=compute.NetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + + +def test_detach_network_endpoints_rest_error(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, + dict, + ], +) +def test_detach_network_endpoints_unary_rest(request_type): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request_init["network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.detach_network_endpoints_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_detach_network_endpoints_unary_rest_required_fields( + request_type=compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, +): + transport_class = transports.NetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).detach_network_endpoints._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.detach_network_endpoints_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_detach_network_endpoints_unary_rest_unset_required_fields(): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.detach_network_endpoints._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkEndpointGroup", + "networkEndpointGroupsDetachEndpointsRequestResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEndpointGroupsRestInterceptor(), + ) + client = NetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "post_detach_network_endpoints" + ) as post, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "pre_detach_network_endpoints" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DetachNetworkEndpointsNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.detach_network_endpoints_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_detach_network_endpoints_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DetachNetworkEndpointsNetworkEndpointGroupRequest, +): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request_init["network_endpoint_groups_detach_endpoints_request_resource"] = { + "network_endpoints": [ + { + "annotations": {}, + "fqdn": "fqdn_value", + "instance": "instance_value", + "ip_address": "ip_address_value", + "port": 453, + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.detach_network_endpoints_unary(request) + + +def test_detach_network_endpoints_unary_rest_flattened(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + network_endpoint_groups_detach_endpoints_request_resource=compute.NetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.detach_network_endpoints_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}/detachNetworkEndpoints" + % client.transport._host, + args[1], + ) + + +def test_detach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.detach_network_endpoints_unary( + compute.DetachNetworkEndpointsNetworkEndpointGroupRequest(), + project="project_value", + zone="zone_value", + network_endpoint_group="network_endpoint_group_value", + network_endpoint_groups_detach_endpoints_request_resource=compute.NetworkEndpointGroupsDetachEndpointsRequest( + network_endpoints=[ + compute.NetworkEndpoint(annotations={"key_value": "value_value"}) + ] + ), + ) + + +def test_detach_network_endpoints_unary_rest_error(): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetNetworkEndpointGroupRequest, + dict, + ], +) +def test_get_rest(request_type): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEndpointGroup( + creation_timestamp="creation_timestamp_value", + default_port=1289, + description="description_value", + id=205, + kind="kind_value", + name="name_value", + network="network_value", + network_endpoint_type="network_endpoint_type_value", + psc_target_service="psc_target_service_value", + region="region_value", + self_link="self_link_value", + size=443, + subnetwork="subnetwork_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NetworkEndpointGroup) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_port == 1289 + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.network_endpoint_type == "network_endpoint_type_value" + assert response.psc_target_service == "psc_target_service_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.size == 443 + assert response.subnetwork == "subnetwork_value" + assert response.zone == "zone_value" + + +def test_get_rest_required_fields(request_type=compute.GetNetworkEndpointGroupRequest): + transport_class = transports.NetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEndpointGroup() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "networkEndpointGroup", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.NetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkEndpointGroupsRestInterceptor(), + ) + client = NetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.NetworkEndpointGroupsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NetworkEndpointGroup.to_json( + compute.NetworkEndpointGroup() + ) + + request = compute.GetNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NetworkEndpointGroup + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetNetworkEndpointGroupRequest +): + client = NetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "network_endpoint_group": "sample3", } request = request_type(request_init) @@ -1895,10 +3221,10 @@ def test_detach_network_endpoints_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.detach_network_endpoints_unary(request) + client.get(request) -def test_detach_network_endpoints_unary_rest_flattened(): +def test_get_rest_flattened(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1907,7 +3233,7 @@ def test_detach_network_endpoints_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NetworkEndpointGroup() # get arguments that satisfy an http rule for this method sample_request = { @@ -1921,36 +3247,31 @@ def test_detach_network_endpoints_unary_rest_flattened(): project="project_value", zone="zone_value", network_endpoint_group="network_endpoint_group_value", - network_endpoint_groups_detach_endpoints_request_resource=compute.NetworkEndpointGroupsDetachEndpointsRequest( - network_endpoints=[ - compute.NetworkEndpoint(annotations={"key_value": "value_value"}) - ] - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.detach_network_endpoints_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}/detachNetworkEndpoints" + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}" % client.transport._host, args[1], ) -def test_detach_network_endpoints_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1959,20 +3280,15 @@ def test_detach_network_endpoints_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.detach_network_endpoints_unary( - compute.DetachNetworkEndpointsNetworkEndpointGroupRequest(), + client.get( + compute.GetNetworkEndpointGroupRequest(), project="project_value", zone="zone_value", network_endpoint_group="network_endpoint_group_value", - network_endpoint_groups_detach_endpoints_request_resource=compute.NetworkEndpointGroupsDetachEndpointsRequest( - network_endpoints=[ - compute.NetworkEndpoint(annotations={"key_value": "value_value"}) - ] - ), ) -def test_detach_network_endpoints_unary_rest_error(): +def test_get_rest_error(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1981,75 +3297,116 @@ def test_detach_network_endpoints_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNetworkEndpointGroupRequest, + compute.InsertNetworkEndpointGroupRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "network_endpoint_group": "sample3", + request_init = {"project": "sample1", "zone": "sample2"} + request_init["network_endpoint_group_resource"] = { + "annotations": {}, + "app_engine": { + "service": "service_value", + "url_mask": "url_mask_value", + "version": "version_value", + }, + "cloud_function": {"function": "function_value", "url_mask": "url_mask_value"}, + "cloud_run": { + "service": "service_value", + "tag": "tag_value", + "url_mask": "url_mask_value", + }, + "creation_timestamp": "creation_timestamp_value", + "default_port": 1289, + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_endpoint_type": "network_endpoint_type_value", + "psc_target_service": "psc_target_service_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_port=1289, description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - network_endpoint_type="network_endpoint_type_value", - psc_target_service="psc_target_service_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - size=443, - subnetwork="subnetwork_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NetworkEndpointGroup) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_port == 1289 assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_endpoint_type == "network_endpoint_type_value" - assert response.psc_target_service == "psc_target_service_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.size == 443 - assert response.subnetwork == "subnetwork_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetNetworkEndpointGroupRequest): +def test_insert_rest_required_fields( + request_type=compute.InsertNetworkEndpointGroupRequest, +): transport_class = transports.NetworkEndpointGroupsRestTransport request_init = {} - request_init["network_endpoint_group"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -2063,23 +3420,22 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkEndpointGroupRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "networkEndpointGroup" in jsonified_request - assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -2092,7 +3448,7 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkEndpointGroupRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2103,35 +3459,36 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkEndpointGroupRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "networkEndpointGroup", + "networkEndpointGroupResource", "project", "zone", ) @@ -2140,7 +3497,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.NetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2153,9 +3510,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkEndpointGroupsRestInterceptor, "post_get" + transports.NetworkEndpointGroupsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.NetworkEndpointGroupsRestInterceptor, "pre_get" + transports.NetworkEndpointGroupsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2170,19 +3527,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NetworkEndpointGroup.to_json( - compute.NetworkEndpointGroup() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetNetworkEndpointGroupRequest() + request = compute.InsertNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroup + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -2194,8 +3549,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetNetworkEndpointGroupRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNetworkEndpointGroupRequest ): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2203,10 +3558,34 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "network_endpoint_group": "sample3", + request_init = {"project": "sample1", "zone": "sample2"} + request_init["network_endpoint_group_resource"] = { + "annotations": {}, + "app_engine": { + "service": "service_value", + "url_mask": "url_mask_value", + "version": "version_value", + }, + "cloud_function": {"function": "function_value", "url_mask": "url_mask_value"}, + "cloud_run": { + "service": "service_value", + "tag": "tag_value", + "url_mask": "url_mask_value", + }, + "creation_timestamp": "creation_timestamp_value", + "default_port": 1289, + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_endpoint_type": "network_endpoint_type_value", + "psc_target_service": "psc_target_service_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", } request = request_type(request_init) @@ -2219,10 +3598,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2231,45 +3610,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "network_endpoint_group": "sample3", - } + sample_request = {"project": "sample1", "zone": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - network_endpoint_group="network_endpoint_group_value", + network_endpoint_group_resource=compute.NetworkEndpointGroup( + annotations={"key_value": "value_value"} + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups/{network_endpoint_group}" + "%s/compute/v1/projects/{project}/zones/{zone}/networkEndpointGroups" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2278,15 +3655,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetNetworkEndpointGroupRequest(), + client.insert( + compute.InsertNetworkEndpointGroupRequest(), project="project_value", zone="zone_value", - network_endpoint_group="network_endpoint_group_value", + network_endpoint_group_resource=compute.NetworkEndpointGroup( + annotations={"key_value": "value_value"} + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = NetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2375,28 +3754,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -3795,6 +5152,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NetworkEndpointGroupsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_network_endpoint_groups_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3834,6 +5204,14 @@ def test_network_endpoint_groups_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_network_endpoint_groups_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_network_firewall_policies.py b/tests/unit/gapic/compute_v1/test_network_firewall_policies.py index 6a9c1150d..f10b28b3d 100644 --- a/tests/unit/gapic/compute_v1/test_network_firewall_policies.py +++ b/tests/unit/gapic/compute_v1/test_network_firewall_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -557,7 +559,7 @@ def test_network_firewall_policies_client_client_options_credentials_file( dict, ], ) -def test_add_association_unary_rest(request_type): +def test_add_association_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -608,10 +610,10 @@ def test_add_association_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_association_unary(request) + response = client.add_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -636,7 +638,7 @@ def test_add_association_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_association_unary_rest_required_fields( +def test_add_association_rest_required_fields( request_type=compute.AddAssociationNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -711,14 +713,14 @@ def test_add_association_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_association_unary(request) + response = client.add_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_association_unary_rest_unset_required_fields(): +def test_add_association_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -742,7 +744,7 @@ def test_add_association_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_association_unary_rest_interceptors(null_interceptor): +def test_add_association_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -782,7 +784,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_association_unary( + client.add_association( request, metadata=[ ("key", "val"), @@ -794,7 +796,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_association_unary_rest_bad_request( +def test_add_association_rest_bad_request( transport: str = "rest", request_type=compute.AddAssociationNetworkFirewallPolicyRequest, ): @@ -823,10 +825,10 @@ def test_add_association_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_association_unary(request) + client.add_association(request) -def test_add_association_unary_rest_flattened(): +def test_add_association_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -858,7 +860,7 @@ def test_add_association_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_association_unary(**mock_args) + client.add_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -871,7 +873,7 @@ def test_add_association_unary_rest_flattened(): ) -def test_add_association_unary_rest_flattened_error(transport: str = "rest"): +def test_add_association_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -880,7 +882,7 @@ def test_add_association_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_association_unary( + client.add_association( compute.AddAssociationNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", @@ -890,7 +892,7 @@ def test_add_association_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_association_unary_rest_error(): +def test_add_association_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -899,11 +901,11 @@ def test_add_association_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AddRuleNetworkFirewallPolicyRequest, + compute.AddAssociationNetworkFirewallPolicyRequest, dict, ], ) -def test_add_rule_unary_rest(request_type): +def test_add_association_unary_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -911,33 +913,12 @@ def test_add_rule_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], + request_init["firewall_policy_association_resource"] = { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", } request = request_type(request_init) @@ -975,36 +956,14 @@ def test_add_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_association_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_add_rule_unary_rest_required_fields( - request_type=compute.AddRuleNetworkFirewallPolicyRequest, +def test_add_association_unary_rest_required_fields( + request_type=compute.AddAssociationNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -1022,7 +981,7 @@ def test_add_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_rule._get_unset_required_fields(jsonified_request) + ).add_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1032,12 +991,11 @@ def test_add_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_rule._get_unset_required_fields(jsonified_request) + ).add_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "max_priority", - "min_priority", + "replace_existing_association", "request_id", ) ) @@ -1079,31 +1037,30 @@ def test_add_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_association_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_rule_unary_rest_unset_required_fields(): +def test_add_association_unary_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.add_rule._get_unset_required_fields({}) + unset_fields = transport.add_association._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "maxPriority", - "minPriority", + "replaceExistingAssociation", "requestId", ) ) & set( ( "firewallPolicy", - "firewallPolicyRuleResource", + "firewallPolicyAssociationResource", "project", ) ) @@ -1111,7 +1068,7 @@ def test_add_rule_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_rule_unary_rest_interceptors(null_interceptor): +def test_add_association_unary_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1124,9 +1081,9 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_add_rule" + transports.NetworkFirewallPoliciesRestInterceptor, "post_add_association" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_add_rule" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_add_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1143,7 +1100,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AddRuleNetworkFirewallPolicyRequest() + request = compute.AddAssociationNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1151,7 +1108,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_rule_unary( + client.add_association_unary( request, metadata=[ ("key", "val"), @@ -1163,8 +1120,9 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_rule_unary_rest_bad_request( - transport: str = "rest", request_type=compute.AddRuleNetworkFirewallPolicyRequest +def test_add_association_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.AddAssociationNetworkFirewallPolicyRequest, ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1173,33 +1131,12 @@ def test_add_rule_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], + request_init["firewall_policy_association_resource"] = { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", } request = request_type(request_init) @@ -1212,10 +1149,10 @@ def test_add_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_rule_unary(request) + client.add_association_unary(request) -def test_add_rule_unary_rest_flattened(): +def test_add_association_unary_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1233,8 +1170,8 @@ def test_add_rule_unary_rest_flattened(): mock_args = dict( project="project_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" + firewall_policy_association_resource=compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" ), ) mock_args.update(sample_request) @@ -1247,20 +1184,20 @@ def test_add_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_rule_unary(**mock_args) + client.add_association_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/addRule" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/addAssociation" % client.transport._host, args[1], ) -def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_add_association_unary_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1269,17 +1206,17 @@ def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_rule_unary( - compute.AddRuleNetworkFirewallPolicyRequest(), + client.add_association_unary( + compute.AddAssociationNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" + firewall_policy_association_resource=compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" ), ) -def test_add_rule_unary_rest_error(): +def test_add_association_unary_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1288,11 +1225,11 @@ def test_add_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.CloneRulesNetworkFirewallPolicyRequest, + compute.AddRuleNetworkFirewallPolicyRequest, dict, ], ) -def test_clone_rules_unary_rest(request_type): +def test_add_rule_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1300,6 +1237,34 @@ def test_clone_rules_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1336,10 +1301,10 @@ def test_clone_rules_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.clone_rules_unary(request) + response = client.add_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1364,8 +1329,8 @@ def test_clone_rules_unary_rest(request_type): assert response.zone == "zone_value" -def test_clone_rules_unary_rest_required_fields( - request_type=compute.CloneRulesNetworkFirewallPolicyRequest, +def test_add_rule_rest_required_fields( + request_type=compute.AddRuleNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -1383,7 +1348,7 @@ def test_clone_rules_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).clone_rules._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1393,12 +1358,13 @@ def test_clone_rules_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).clone_rules._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( + "max_priority", + "min_priority", "request_id", - "source_firewall_policy", ) ) jsonified_request.update(unset_fields) @@ -1430,6 +1396,7 @@ def test_clone_rules_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1438,29 +1405,31 @@ def test_clone_rules_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.clone_rules_unary(request) + response = client.add_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_clone_rules_unary_rest_unset_required_fields(): +def test_add_rule_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.clone_rules._get_unset_required_fields({}) + unset_fields = transport.add_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( + "maxPriority", + "minPriority", "requestId", - "sourceFirewallPolicy", ) ) & set( ( "firewallPolicy", + "firewallPolicyRuleResource", "project", ) ) @@ -1468,7 +1437,7 @@ def test_clone_rules_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_clone_rules_unary_rest_interceptors(null_interceptor): +def test_add_rule_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1481,9 +1450,9 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_clone_rules" + transports.NetworkFirewallPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_clone_rules" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1500,7 +1469,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.CloneRulesNetworkFirewallPolicyRequest() + request = compute.AddRuleNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1508,7 +1477,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.clone_rules_unary( + client.add_rule( request, metadata=[ ("key", "val"), @@ -1520,8 +1489,8 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_clone_rules_unary_rest_bad_request( - transport: str = "rest", request_type=compute.CloneRulesNetworkFirewallPolicyRequest +def test_add_rule_rest_bad_request( + transport: str = "rest", request_type=compute.AddRuleNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1530,29 +1499,57 @@ def test_clone_rules_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.clone_rules_unary(request) - - -def test_clone_rules_unary_rest_flattened(): - client = NetworkFirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.add_rule(request) + + +def test_add_rule_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. return_value = compute.Operation() # get arguments that satisfy an http rule for this method @@ -1562,6 +1559,9 @@ def test_clone_rules_unary_rest_flattened(): mock_args = dict( project="project_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -1573,20 +1573,20 @@ def test_clone_rules_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.clone_rules_unary(**mock_args) + client.add_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/cloneRules" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/addRule" % client.transport._host, args[1], ) -def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1595,14 +1595,17 @@ def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.clone_rules_unary( - compute.CloneRulesNetworkFirewallPolicyRequest(), + client.add_rule( + compute.AddRuleNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_clone_rules_unary_rest_error(): +def test_add_rule_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1611,11 +1614,11 @@ def test_clone_rules_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteNetworkFirewallPolicyRequest, + compute.AddRuleNetworkFirewallPolicyRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_add_rule_unary_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1623,6 +1626,34 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1659,36 +1690,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_rule_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteNetworkFirewallPolicyRequest, +def test_add_rule_unary_rest_required_fields( + request_type=compute.AddRuleNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -1706,7 +1715,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1716,9 +1725,15 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "max_priority", + "min_priority", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1745,9 +1760,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1756,24 +1772,31 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_rule_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_add_rule_unary_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.add_rule._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "maxPriority", + "minPriority", + "requestId", + ) + ) & set( ( "firewallPolicy", + "firewallPolicyRuleResource", "project", ) ) @@ -1781,7 +1804,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_add_rule_unary_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1794,9 +1817,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_delete" + transports.NetworkFirewallPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_delete" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1813,7 +1836,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteNetworkFirewallPolicyRequest() + request = compute.AddRuleNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1821,7 +1844,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.add_rule_unary( request, metadata=[ ("key", "val"), @@ -1833,8 +1856,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteNetworkFirewallPolicyRequest +def test_add_rule_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddRuleNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1843,6 +1866,34 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1854,10 +1905,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.add_rule_unary(request) -def test_delete_unary_rest_flattened(): +def test_add_rule_unary_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1875,6 +1926,9 @@ def test_delete_unary_rest_flattened(): mock_args = dict( project="project_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -1886,20 +1940,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.add_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/addRule" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1908,14 +1962,17 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteNetworkFirewallPolicyRequest(), + client.add_rule_unary( + compute.AddRuleNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_delete_unary_rest_error(): +def test_add_rule_unary_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1924,11 +1981,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNetworkFirewallPolicyRequest, + compute.CloneRulesNetworkFirewallPolicyRequest, dict, ], ) -def test_get_rest(request_type): +def test_clone_rules_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1941,48 +1998,68 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - display_name="display_name_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - parent="parent_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - rule_tuple_count=1737, self_link="self_link_value", - self_link_with_id="self_link_with_id_value", - short_name="short_name_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.clone_rules(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicy) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.display_name == "display_name_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.region == "region_value" - assert response.rule_tuple_count == 1737 + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.self_link_with_id == "self_link_with_id_value" - assert response.short_name == "short_name_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetNetworkFirewallPolicyRequest): +def test_clone_rules_rest_required_fields( + request_type=compute.CloneRulesNetworkFirewallPolicyRequest, +): transport_class = transports.NetworkFirewallPoliciesRestTransport request_init = {} @@ -1999,7 +2076,7 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkFirewallPolicyR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2009,7 +2086,14 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkFirewallPolicyR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_firewall_policy", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2025,7 +2109,7 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkFirewallPolicyR request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2036,32 +2120,37 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkFirewallPolicyR # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.clone_rules(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_clone_rules_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.clone_rules._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "requestId", + "sourceFirewallPolicy", + ) + ) & set( ( "firewallPolicy", @@ -2072,7 +2161,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_clone_rules_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2085,9 +2174,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_get" + transports.NetworkFirewallPoliciesRestInterceptor, "post_clone_rules" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_get" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_clone_rules" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2102,19 +2191,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicy.to_json( - compute.FirewallPolicy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetNetworkFirewallPolicyRequest() + request = compute.CloneRulesNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicy + post.return_value = compute.Operation - client.get( + client.clone_rules( request, metadata=[ ("key", "val"), @@ -2126,8 +2213,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetNetworkFirewallPolicyRequest +def test_clone_rules_rest_bad_request( + transport: str = "rest", request_type=compute.CloneRulesNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2147,10 +2234,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.clone_rules(request) -def test_get_rest_flattened(): +def test_clone_rules_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2159,7 +2246,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "firewall_policy": "sample2"} @@ -2174,25 +2261,25 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.clone_rules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/cloneRules" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_clone_rules_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2201,14 +2288,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetNetworkFirewallPolicyRequest(), + client.clone_rules( + compute.CloneRulesNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", ) -def test_get_rest_error(): +def test_clone_rules_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2217,11 +2304,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetAssociationNetworkFirewallPolicyRequest, + compute.CloneRulesNetworkFirewallPolicyRequest, dict, ], ) -def test_get_association_rest(request_type): +def test_clone_rules_unary_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2234,33 +2321,45 @@ def test_get_association_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value", - display_name="display_name_value", - firewall_policy_id="firewall_policy_id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", name="name_value", - short_name="short_name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_association(request) + response = client.clone_rules_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicyAssociation) - assert response.attachment_target == "attachment_target_value" - assert response.display_name == "display_name_value" - assert response.firewall_policy_id == "firewall_policy_id_value" - assert response.name == "name_value" - assert response.short_name == "short_name_value" + assert isinstance(response, compute.Operation) -def test_get_association_rest_required_fields( - request_type=compute.GetAssociationNetworkFirewallPolicyRequest, +def test_clone_rules_unary_rest_required_fields( + request_type=compute.CloneRulesNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -2278,7 +2377,7 @@ def test_get_association_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_association._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2288,9 +2387,14 @@ def test_get_association_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_association._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("name",)) + assert not set(unset_fields) - set( + ( + "request_id", + "source_firewall_policy", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2306,7 +2410,7 @@ def test_get_association_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2317,32 +2421,37 @@ def test_get_association_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_association(request) + response = client.clone_rules_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_association_rest_unset_required_fields(): +def test_clone_rules_unary_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_association._get_unset_required_fields({}) + unset_fields = transport.clone_rules._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("name",)) + set( + ( + "requestId", + "sourceFirewallPolicy", + ) + ) & set( ( "firewallPolicy", @@ -2353,7 +2462,7 @@ def test_get_association_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_association_rest_interceptors(null_interceptor): +def test_clone_rules_unary_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2366,9 +2475,9 @@ def test_get_association_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_get_association" + transports.NetworkFirewallPoliciesRestInterceptor, "post_clone_rules" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_get_association" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_clone_rules" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2383,19 +2492,17 @@ def test_get_association_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyAssociation.to_json( - compute.FirewallPolicyAssociation() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetAssociationNetworkFirewallPolicyRequest() + request = compute.CloneRulesNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyAssociation + post.return_value = compute.Operation - client.get_association( + client.clone_rules_unary( request, metadata=[ ("key", "val"), @@ -2407,9 +2514,8 @@ def test_get_association_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_association_rest_bad_request( - transport: str = "rest", - request_type=compute.GetAssociationNetworkFirewallPolicyRequest, +def test_clone_rules_unary_rest_bad_request( + transport: str = "rest", request_type=compute.CloneRulesNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2429,10 +2535,10 @@ def test_get_association_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_association(request) + client.clone_rules_unary(request) -def test_get_association_rest_flattened(): +def test_clone_rules_unary_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2441,7 +2547,7 @@ def test_get_association_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "firewall_policy": "sample2"} @@ -2456,25 +2562,25 @@ def test_get_association_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_association(**mock_args) + client.clone_rules_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/getAssociation" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/cloneRules" % client.transport._host, args[1], ) -def test_get_association_rest_flattened_error(transport: str = "rest"): +def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2483,14 +2589,14 @@ def test_get_association_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_association( - compute.GetAssociationNetworkFirewallPolicyRequest(), + client.clone_rules_unary( + compute.CloneRulesNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", ) -def test_get_association_rest_error(): +def test_clone_rules_unary_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2499,52 +2605,90 @@ def test_get_association_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyNetworkFirewallPolicyRequest, + compute.DeleteNetworkFirewallPolicyRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "firewall_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyNetworkFirewallPolicyRequest, +def test_delete_rest_required_fields( + request_type=compute.DeleteNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport request_init = {} + request_init["firewall_policy"] = "" request_init["project"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2556,26 +2700,26 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewallPolicy"] = "firewall_policy_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2584,7 +2728,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2595,43 +2739,43 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "firewallPolicy", "project", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2644,9 +2788,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_get_iam_policy" + transports.NetworkFirewallPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_get_iam_policy" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2661,17 +2805,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyNetworkFirewallPolicyRequest() + request = compute.DeleteNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete( request, metadata=[ ("key", "val"), @@ -2683,9 +2827,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", - request_type=compute.GetIamPolicyNetworkFirewallPolicyRequest, +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2693,7 +2836,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "firewall_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2705,10 +2848,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2717,40 +2860,40 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1", "firewall_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2759,14 +2902,14 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyNetworkFirewallPolicyRequest(), + client.delete( + compute.DeleteNetworkFirewallPolicyRequest(), project="project_value", - resource="resource_value", + firewall_policy="firewall_policy_value", ) -def test_get_iam_policy_rest_error(): +def test_delete_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2775,11 +2918,11 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRuleNetworkFirewallPolicyRequest, + compute.DeleteNetworkFirewallPolicyRequest, dict, ], ) -def test_get_rule_rest(request_type): +def test_delete_unary_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2792,45 +2935,45 @@ def test_get_rule_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule( - action="action_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", description="description_value", - direction="direction_value", - disabled=True, - enable_logging=True, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - priority=898, - rule_name="rule_name_value", - rule_tuple_count=1737, - target_resources=["target_resources_value"], - target_service_accounts=["target_service_accounts_value"], + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicyRule) - assert response.action == "action_value" - assert response.description == "description_value" - assert response.direction == "direction_value" - assert response.disabled is True - assert response.enable_logging is True - assert response.kind == "kind_value" - assert response.priority == 898 - assert response.rule_name == "rule_name_value" - assert response.rule_tuple_count == 1737 - assert response.target_resources == ["target_resources_value"] - assert response.target_service_accounts == ["target_service_accounts_value"] + assert isinstance(response, compute.Operation) -def test_get_rule_rest_required_fields( - request_type=compute.GetRuleNetworkFirewallPolicyRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -2848,7 +2991,7 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2858,9 +3001,9 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("priority",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2876,7 +3019,7 @@ def test_get_rule_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2887,32 +3030,32 @@ def test_get_rule_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rule_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_rule._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("priority",)) + set(("requestId",)) & set( ( "firewallPolicy", @@ -2923,7 +3066,7 @@ def test_get_rule_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rule_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2936,9 +3079,9 @@ def test_get_rule_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_get_rule" + transports.NetworkFirewallPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_get_rule" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2953,19 +3096,17 @@ def test_get_rule_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyRule.to_json( - compute.FirewallPolicyRule() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRuleNetworkFirewallPolicyRequest() + request = compute.DeleteNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyRule + post.return_value = compute.Operation - client.get_rule( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2977,8 +3118,8 @@ def test_get_rule_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rule_rest_bad_request( - transport: str = "rest", request_type=compute.GetRuleNetworkFirewallPolicyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2998,10 +3139,10 @@ def test_get_rule_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_rule(request) + client.delete_unary(request) -def test_get_rule_rest_flattened(): +def test_delete_unary_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3010,7 +3151,7 @@ def test_get_rule_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "firewall_policy": "sample2"} @@ -3025,25 +3166,25 @@ def test_get_rule_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_rule(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/getRule" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_rule_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3052,14 +3193,14 @@ def test_get_rule_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_rule( - compute.GetRuleNetworkFirewallPolicyRequest(), + client.delete_unary( + compute.DeleteNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", ) -def test_get_rule_rest_error(): +def test_delete_unary_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3068,148 +3209,69 @@ def test_get_rule_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertNetworkFirewallPolicyRequest, + compute.GetNetworkFirewallPolicyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } + request_init = {"project": "sample1", "firewall_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.FirewallPolicy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + display_name="display_name_value", + fingerprint="fingerprint_value", + id=205, kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + parent="parent_value", region="region_value", + rule_tuple_count=1737, self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + self_link_with_id="self_link_with_id_value", + short_name="short_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.FirewallPolicy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.display_name == "display_name_value" + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.parent == "parent_value" assert response.region == "region_value" + assert response.rule_tuple_count == 1737 assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.self_link_with_id == "self_link_with_id_value" + assert response.short_name == "short_name_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertNetworkFirewallPolicyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetNetworkFirewallPolicyRequest): transport_class = transports.NetworkFirewallPoliciesRestTransport request_init = {} + request_init["firewall_policy"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -3222,21 +3284,22 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewallPolicy"] = "firewall_policy_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -3247,7 +3310,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.FirewallPolicy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3258,36 +3321,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "firewallPolicyResource", + "firewallPolicy", "project", ) ) @@ -3295,7 +3357,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3308,9 +3370,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_insert" + transports.NetworkFirewallPoliciesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_insert" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3325,17 +3387,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.FirewallPolicy.to_json( + compute.FirewallPolicy() + ) - request = compute.InsertNetworkFirewallPolicyRequest() + request = compute.GetNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.FirewallPolicy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -3347,8 +3411,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertNetworkFirewallPolicyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3356,67 +3420,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } + request_init = {"project": "sample1", "firewall_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3428,10 +3432,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3440,46 +3444,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.FirewallPolicy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "firewall_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3488,20 +3486,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertNetworkFirewallPolicyRequest(), + client.get( + compute.GetNetworkFirewallPolicyRequest(), project="project_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), + firewall_policy="firewall_policy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3510,50 +3502,55 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListNetworkFirewallPoliciesRequest, + compute.GetAssociationNetworkFirewallPolicyRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_association_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "firewall_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", + return_value = compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value", + display_name="display_name_value", + firewall_policy_id="firewall_policy_id_value", + name="name_value", + short_name="short_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, compute.FirewallPolicyAssociation) + assert response.attachment_target == "attachment_target_value" + assert response.display_name == "display_name_value" + assert response.firewall_policy_id == "firewall_policy_id_value" + assert response.name == "name_value" + assert response.short_name == "short_name_value" -def test_list_rest_required_fields( - request_type=compute.ListNetworkFirewallPoliciesRequest, +def test_get_association_rest_required_fields( + request_type=compute.GetAssociationNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport request_init = {} + request_init["firewall_policy"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -3566,29 +3563,24 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewallPolicy"] = "firewall_policy_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("name",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -3599,7 +3591,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList() + return_value = compute.FirewallPolicyAssociation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3617,18 +3609,1731 @@ def test_list_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_association_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_association._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("name",)) + & set( + ( + "firewallPolicy", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_association_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_get_association" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_get_association" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyAssociation.to_json( + compute.FirewallPolicyAssociation() + ) + + request = compute.GetAssociationNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyAssociation + + client.get_association( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_association_rest_bad_request( + transport: str = "rest", + request_type=compute.GetAssociationNetworkFirewallPolicyRequest, +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_association(request) + + +def test_get_association_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyAssociation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "firewall_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy="firewall_policy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_association(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/getAssociation" + % client.transport._host, + args[1], + ) + + +def test_get_association_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_association( + compute.GetAssociationNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy="firewall_policy_value", + ) + + +def test_get_association_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyNetworkFirewallPolicyRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", + request_type=compute.GetIamPolicyNetworkFirewallPolicyRequest, +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "resource": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyNetworkFirewallPolicyRequest(), + project="project_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRuleNetworkFirewallPolicyRequest, + dict, + ], +) +def test_get_rule_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule( + action="action_value", + description="description_value", + direction="direction_value", + disabled=True, + enable_logging=True, + kind="kind_value", + priority=898, + rule_name="rule_name_value", + rule_tuple_count=1737, + target_resources=["target_resources_value"], + target_service_accounts=["target_service_accounts_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.FirewallPolicyRule) + assert response.action == "action_value" + assert response.description == "description_value" + assert response.direction == "direction_value" + assert response.disabled is True + assert response.enable_logging is True + assert response.kind == "kind_value" + assert response.priority == 898 + assert response.rule_name == "rule_name_value" + assert response.rule_tuple_count == 1737 + assert response.target_resources == ["target_resources_value"] + assert response.target_service_accounts == ["target_service_accounts_value"] + + +def test_get_rule_rest_required_fields( + request_type=compute.GetRuleNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("priority",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rule_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("priority",)) + & set( + ( + "firewallPolicy", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rule_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_get_rule" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_get_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyRule.to_json( + compute.FirewallPolicyRule() + ) + + request = compute.GetRuleNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyRule + + client.get_rule( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rule_rest_bad_request( + transport: str = "rest", request_type=compute.GetRuleNetworkFirewallPolicyRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_rule(request) + + +def test_get_rule_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "firewall_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy="firewall_policy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_rule(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/getRule" + % client.transport._host, + args[1], + ) + + +def test_get_rule_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_rule( + compute.GetRuleNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy="firewall_policy_value", + ) + + +def test_get_rule_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertNetworkFirewallPolicyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicyResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNetworkFirewallPolicyRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_insert_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertNetworkFirewallPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicyResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNetworkFirewallPolicyRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_insert_unary_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListNetworkFirewallPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + + +def test_list_rest_required_fields( + request_type=compute.ListNetworkFirewallPoliciesRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -3637,19 +5342,1668 @@ def test_list_rest_unset_required_fields(): assert set(unset_fields) == ( set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyList.to_json( + compute.FirewallPolicyList() + ) + + request = compute.ListNetworkFirewallPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListNetworkFirewallPoliciesRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListNetworkFirewallPoliciesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + compute.FirewallPolicy(), + compute.FirewallPolicy(), + ], + next_page_token="abc", + ), + compute.FirewallPolicyList( + items=[], + next_page_token="def", + ), + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + ], + next_page_token="ghi", + ), + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + compute.FirewallPolicy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.FirewallPolicyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.FirewallPolicy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNetworkFirewallPolicyRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "firewall_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_patch_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNetworkFirewallPolicyRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "firewall_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_patch_unary_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRuleNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_rule_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rule_rest_required_fields( + request_type=compute.PatchRuleNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "priority", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rule_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "priority", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rule_rest_interceptors(null_interceptor): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkFirewallPoliciesRestInterceptor(), + ) + client = NetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "post_patch_rule" + ) as post, mock.patch.object( + transports.NetworkFirewallPoliciesRestInterceptor, "pre_patch_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRuleNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_rule( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rule_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRuleNetworkFirewallPolicyRequest +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_rule(request) + + +def test_patch_rule_rest_flattened(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "firewall_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_rule(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/patchRule" + % client.transport._host, + args[1], + ) + + +def test_patch_rule_rest_flattened_error(transport: str = "rest"): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_rule( + compute.PatchRuleNetworkFirewallPolicyRequest(), + project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), + ) + + +def test_patch_rule_rest_error(): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRuleNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_rule_unary_rest(request_type): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_rule_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_rule_unary_rest_required_fields( + request_type=compute.PatchRuleNetworkFirewallPolicyRequest, +): + transport_class = transports.NetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "priority", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_rule_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rule_unary_rest_unset_required_fields(): + transport = transports.NetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "priority", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rule_unary_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3662,9 +7016,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_list" + transports.NetworkFirewallPoliciesRestInterceptor, "post_patch_rule" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_list" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_patch_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3679,19 +7033,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyList.to_json( - compute.FirewallPolicyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListNetworkFirewallPoliciesRequest() + request = compute.PatchRuleNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyList + post.return_value = compute.Operation - client.list( + client.patch_rule_unary( request, metadata=[ ("key", "val"), @@ -3703,8 +7055,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListNetworkFirewallPoliciesRequest +def test_patch_rule_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRuleNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3712,7 +7064,35 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "firewall_policy": "sample2"} + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3724,10 +7104,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_rule_unary(request) -def test_list_rest_flattened(): +def test_patch_rule_unary_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3736,39 +7116,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "firewall_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/patchRule" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3777,81 +7161,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListNetworkFirewallPoliciesRequest(), + client.patch_rule_unary( + compute.PatchRuleNetworkFirewallPolicyRequest(), project="project_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rule_unary_rest_error(): client = NetworkFirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - compute.FirewallPolicy(), - compute.FirewallPolicy(), - ], - next_page_token="abc", - ), - compute.FirewallPolicyList( - items=[], - next_page_token="def", - ), - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - ], - next_page_token="ghi", - ), - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - compute.FirewallPolicy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.FirewallPolicyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.FirewallPolicy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchNetworkFirewallPolicyRequest, + compute.RemoveAssociationNetworkFirewallPolicyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_remove_association_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3859,66 +7192,6 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3955,10 +7228,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.remove_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3983,8 +7256,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchNetworkFirewallPolicyRequest, +def test_remove_association_rest_required_fields( + request_type=compute.RemoveAssociationNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -4002,7 +7275,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4012,9 +7285,14 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4041,10 +7319,9 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -4053,25 +7330,29 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.remove_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_remove_association_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.remove_association._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "name", + "requestId", + ) + ) & set( ( "firewallPolicy", - "firewallPolicyResource", "project", ) ) @@ -4079,7 +7360,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_remove_association_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4092,9 +7373,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_patch" + transports.NetworkFirewallPoliciesRestInterceptor, "post_remove_association" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_patch" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_remove_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4111,7 +7392,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchNetworkFirewallPolicyRequest() + request = compute.RemoveAssociationNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4119,7 +7400,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.remove_association( request, metadata=[ ("key", "val"), @@ -4127,80 +7408,21 @@ def test_patch_unary_rest_interceptors(null_interceptor): ], ) - pre.assert_called_once() - post.assert_called_once() - - -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchNetworkFirewallPolicyRequest -): - client = NetworkFirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "firewall_policy": "sample2"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_association_rest_bad_request( + transport: str = "rest", + request_type=compute.RemoveAssociationNetworkFirewallPolicyRequest, +): + client = NetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "firewall_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4212,10 +7434,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.remove_association(request) -def test_patch_unary_rest_flattened(): +def test_remove_association_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4233,13 +7455,6 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", firewall_policy="firewall_policy_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), ) mock_args.update(sample_request) @@ -4251,20 +7466,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.remove_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/removeAssociation" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_association_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4273,21 +7488,14 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchNetworkFirewallPolicyRequest(), + client.remove_association( + compute.RemoveAssociationNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), ) -def test_patch_unary_rest_error(): +def test_remove_association_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4296,11 +7504,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchRuleNetworkFirewallPolicyRequest, + compute.RemoveAssociationNetworkFirewallPolicyRequest, dict, ], ) -def test_patch_rule_unary_rest(request_type): +def test_remove_association_unary_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4308,34 +7516,6 @@ def test_patch_rule_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -4372,36 +7552,14 @@ def test_patch_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_association_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_rule_unary_rest_required_fields( - request_type=compute.PatchRuleNetworkFirewallPolicyRequest, +def test_remove_association_unary_rest_required_fields( + request_type=compute.RemoveAssociationNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -4419,7 +7577,7 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4429,11 +7587,11 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "priority", + "name", "request_id", ) ) @@ -4466,7 +7624,6 @@ def test_patch_rule_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -4475,30 +7632,29 @@ def test_patch_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_association_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_rule_unary_rest_unset_required_fields(): +def test_remove_association_unary_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch_rule._get_unset_required_fields({}) + unset_fields = transport.remove_association._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "priority", + "name", "requestId", ) ) & set( ( "firewallPolicy", - "firewallPolicyRuleResource", "project", ) ) @@ -4506,7 +7662,7 @@ def test_patch_rule_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_rule_unary_rest_interceptors(null_interceptor): +def test_remove_association_unary_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4519,9 +7675,9 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_patch_rule" + transports.NetworkFirewallPoliciesRestInterceptor, "post_remove_association" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_patch_rule" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_remove_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4538,7 +7694,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRuleNetworkFirewallPolicyRequest() + request = compute.RemoveAssociationNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4546,7 +7702,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_rule_unary( + client.remove_association_unary( request, metadata=[ ("key", "val"), @@ -4558,8 +7714,9 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_rule_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRuleNetworkFirewallPolicyRequest +def test_remove_association_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.RemoveAssociationNetworkFirewallPolicyRequest, ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4568,34 +7725,6 @@ def test_patch_rule_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "firewall_policy": "sample2"} - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4607,10 +7736,10 @@ def test_patch_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_rule_unary(request) + client.remove_association_unary(request) -def test_patch_rule_unary_rest_flattened(): +def test_remove_association_unary_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4628,9 +7757,6 @@ def test_patch_rule_unary_rest_flattened(): mock_args = dict( project="project_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" - ), ) mock_args.update(sample_request) @@ -4642,20 +7768,20 @@ def test_patch_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_rule_unary(**mock_args) + client.remove_association_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/patchRule" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/removeAssociation" % client.transport._host, args[1], ) -def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4664,17 +7790,14 @@ def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_rule_unary( - compute.PatchRuleNetworkFirewallPolicyRequest(), + client.remove_association_unary( + compute.RemoveAssociationNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" - ), ) -def test_patch_rule_unary_rest_error(): +def test_remove_association_unary_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4683,11 +7806,11 @@ def test_patch_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RemoveAssociationNetworkFirewallPolicyRequest, + compute.RemoveRuleNetworkFirewallPolicyRequest, dict, ], ) -def test_remove_association_unary_rest(request_type): +def test_remove_rule_rest(request_type): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4731,10 +7854,10 @@ def test_remove_association_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_association_unary(request) + response = client.remove_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -4759,8 +7882,8 @@ def test_remove_association_unary_rest(request_type): assert response.zone == "zone_value" -def test_remove_association_unary_rest_required_fields( - request_type=compute.RemoveAssociationNetworkFirewallPolicyRequest, +def test_remove_rule_rest_required_fields( + request_type=compute.RemoveRuleNetworkFirewallPolicyRequest, ): transport_class = transports.NetworkFirewallPoliciesRestTransport @@ -4778,7 +7901,7 @@ def test_remove_association_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_association._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4788,11 +7911,11 @@ def test_remove_association_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_association._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "name", + "priority", "request_id", ) ) @@ -4833,23 +7956,23 @@ def test_remove_association_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_association_unary(request) + response = client.remove_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_association_unary_rest_unset_required_fields(): +def test_remove_rule_rest_unset_required_fields(): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_association._get_unset_required_fields({}) + unset_fields = transport.remove_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "name", + "priority", "requestId", ) ) @@ -4863,7 +7986,7 @@ def test_remove_association_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_association_unary_rest_interceptors(null_interceptor): +def test_remove_rule_rest_interceptors(null_interceptor): transport = transports.NetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4876,9 +7999,9 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "post_remove_association" + transports.NetworkFirewallPoliciesRestInterceptor, "post_remove_rule" ) as post, mock.patch.object( - transports.NetworkFirewallPoliciesRestInterceptor, "pre_remove_association" + transports.NetworkFirewallPoliciesRestInterceptor, "pre_remove_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4895,7 +8018,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveAssociationNetworkFirewallPolicyRequest() + request = compute.RemoveRuleNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4903,7 +8026,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_association_unary( + client.remove_rule( request, metadata=[ ("key", "val"), @@ -4915,9 +8038,8 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_association_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.RemoveAssociationNetworkFirewallPolicyRequest, +def test_remove_rule_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveRuleNetworkFirewallPolicyRequest ): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4937,10 +8059,10 @@ def test_remove_association_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_association_unary(request) + client.remove_rule(request) -def test_remove_association_unary_rest_flattened(): +def test_remove_rule_rest_flattened(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4969,20 +8091,20 @@ def test_remove_association_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_association_unary(**mock_args) + client.remove_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/removeAssociation" + "%s/compute/v1/projects/{project}/global/firewallPolicies/{firewall_policy}/removeRule" % client.transport._host, args[1], ) -def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_rule_rest_flattened_error(transport: str = "rest"): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4991,14 +8113,14 @@ def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_association_unary( - compute.RemoveAssociationNetworkFirewallPolicyRequest(), + client.remove_rule( + compute.RemoveRuleNetworkFirewallPolicyRequest(), project="project_value", firewall_policy="firewall_policy_value", ) -def test_remove_association_unary_rest_error(): +def test_remove_rule_rest_error(): client = NetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5059,28 +8181,6 @@ def test_remove_rule_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_remove_rule_unary_rest_required_fields( @@ -6124,6 +9224,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NetworkFirewallPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_network_firewall_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -6170,6 +9283,14 @@ def test_network_firewall_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_network_firewall_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_networks.py b/tests/unit/gapic/compute_v1/test_networks.py index c4dfe670c..dde7ef50e 100644 --- a/tests/unit/gapic/compute_v1/test_networks.py +++ b/tests/unit/gapic/compute_v1/test_networks.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -512,7 +514,7 @@ def test_networks_client_client_options_credentials_file( dict, ], ) -def test_add_peering_unary_rest(request_type): +def test_add_peering_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -574,10 +576,10 @@ def test_add_peering_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_peering_unary(request) + response = client.add_peering(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -602,7 +604,7 @@ def test_add_peering_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_peering_unary_rest_required_fields( +def test_add_peering_rest_required_fields( request_type=compute.AddPeeringNetworkRequest, ): transport_class = transports.NetworksRestTransport @@ -672,14 +674,14 @@ def test_add_peering_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_peering_unary(request) + response = client.add_peering(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_peering_unary_rest_unset_required_fields(): +def test_add_peering_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -698,7 +700,7 @@ def test_add_peering_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_peering_unary_rest_interceptors(null_interceptor): +def test_add_peering_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -736,7 +738,7 @@ def test_add_peering_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_peering_unary( + client.add_peering( request, metadata=[ ("key", "val"), @@ -748,7 +750,7 @@ def test_add_peering_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_peering_unary_rest_bad_request( +def test_add_peering_rest_bad_request( transport: str = "rest", request_type=compute.AddPeeringNetworkRequest ): client = NetworksClient( @@ -787,10 +789,10 @@ def test_add_peering_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_peering_unary(request) + client.add_peering(request) -def test_add_peering_unary_rest_flattened(): +def test_add_peering_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -822,7 +824,7 @@ def test_add_peering_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_peering_unary(**mock_args) + client.add_peering(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -835,7 +837,7 @@ def test_add_peering_unary_rest_flattened(): ) -def test_add_peering_unary_rest_flattened_error(transport: str = "rest"): +def test_add_peering_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -844,7 +846,7 @@ def test_add_peering_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_peering_unary( + client.add_peering( compute.AddPeeringNetworkRequest(), project="project_value", network="network_value", @@ -854,7 +856,7 @@ def test_add_peering_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_peering_unary_rest_error(): +def test_add_peering_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -863,11 +865,11 @@ def test_add_peering_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteNetworkRequest, + compute.AddPeeringNetworkRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_add_peering_unary_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -875,6 +877,24 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_add_peering_request_resource"] = { + "auto_create_routes": True, + "name": "name_value", + "network_peering": { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + }, + "peer_network": "peer_network_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -911,35 +931,15 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_peering_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteNetworkRequest): +def test_add_peering_unary_rest_required_fields( + request_type=compute.AddPeeringNetworkRequest, +): transport_class = transports.NetworksRestTransport request_init = {} @@ -956,7 +956,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNetworkReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_peering._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -966,7 +966,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNetworkReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_peering._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -995,9 +995,10 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNetworkReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1006,24 +1007,25 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNetworkReq response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_peering_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_add_peering_unary_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.add_peering._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "network", + "networksAddPeeringRequestResource", "project", ) ) @@ -1031,7 +1033,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_add_peering_unary_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -1042,9 +1044,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_delete" + transports.NetworksRestInterceptor, "post_add_peering" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_delete" + transports.NetworksRestInterceptor, "pre_add_peering" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1061,7 +1063,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteNetworkRequest() + request = compute.AddPeeringNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1069,7 +1071,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.add_peering_unary( request, metadata=[ ("key", "val"), @@ -1081,8 +1083,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteNetworkRequest +def test_add_peering_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddPeeringNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1091,6 +1093,24 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_add_peering_request_resource"] = { + "auto_create_routes": True, + "name": "name_value", + "network_peering": { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + }, + "peer_network": "peer_network_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1102,10 +1122,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.add_peering_unary(request) -def test_delete_unary_rest_flattened(): +def test_add_peering_unary_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1123,6 +1143,9 @@ def test_delete_unary_rest_flattened(): mock_args = dict( project="project_value", network="network_value", + networks_add_peering_request_resource=compute.NetworksAddPeeringRequest( + auto_create_routes=True + ), ) mock_args.update(sample_request) @@ -1134,20 +1157,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.add_peering_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks/{network}" + "%s/compute/v1/projects/{project}/global/networks/{network}/addPeering" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_add_peering_unary_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1156,14 +1179,17 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteNetworkRequest(), + client.add_peering_unary( + compute.AddPeeringNetworkRequest(), project="project_value", network="network_value", + networks_add_peering_request_resource=compute.NetworksAddPeeringRequest( + auto_create_routes=True + ), ) -def test_delete_unary_rest_error(): +def test_add_peering_unary_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1172,11 +1198,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNetworkRequest, + compute.DeleteNetworkRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1189,55 +1215,66 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Network( - I_pv4_range="I_pv4_range_value", - auto_create_subnetworks=True, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - enable_ula_internal_ipv6=True, - gateway_i_pv4="gateway_i_pv4_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - internal_ipv6_range="internal_ipv6_range_value", + insert_time="insert_time_value", kind="kind_value", - mtu=342, name="name_value", - network_firewall_policy_enforcement_order="network_firewall_policy_enforcement_order_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - self_link_with_id="self_link_with_id_value", - subnetworks=["subnetworks_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Network.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Network) - assert response.I_pv4_range == "I_pv4_range_value" - assert response.auto_create_subnetworks is True + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.enable_ula_internal_ipv6 is True - assert response.gateway_i_pv4 == "gateway_i_pv4_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.internal_ipv6_range == "internal_ipv6_range_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.mtu == 342 assert response.name == "name_value" - assert ( - response.network_firewall_policy_enforcement_order - == "network_firewall_policy_enforcement_order_value" - ) + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.self_link_with_id == "self_link_with_id_value" - assert response.subnetworks == ["subnetworks_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetNetworkRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteNetworkRequest): transport_class = transports.NetworksRestTransport request_init = {} @@ -1254,7 +1291,7 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1264,7 +1301,9 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1280,7 +1319,7 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Network() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1291,32 +1330,32 @@ def test_get_rest_required_fields(request_type=compute.GetNetworkRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Network.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "network", @@ -1327,7 +1366,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -1338,9 +1377,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_get" + transports.NetworksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_get" + transports.NetworksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1355,17 +1394,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Network.to_json(compute.Network()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetNetworkRequest() + request = compute.DeleteNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Network + post.return_value = compute.Operation - client.get( + client.delete( request, metadata=[ ("key", "val"), @@ -1377,8 +1416,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetNetworkRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1398,10 +1437,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete(request) -def test_get_rest_flattened(): +def test_delete_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1410,7 +1449,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Network() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "network": "sample2"} @@ -1425,12 +1464,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Network.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1443,7 +1482,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1452,14 +1491,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetNetworkRequest(), + client.delete( + compute.DeleteNetworkRequest(), project="project_value", network="network_value", ) -def test_get_rest_error(): +def test_delete_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1468,11 +1507,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetEffectiveFirewallsNetworkRequest, + compute.DeleteNetworkRequest, dict, ], ) -def test_get_effective_firewalls_rest(request_type): +def test_delete_unary_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1485,25 +1524,44 @@ def test_get_effective_firewalls_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworksGetEffectiveFirewallsResponse() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.NetworksGetEffectiveFirewallsResponse.to_json( - return_value - ) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.get_effective_firewalls(request) + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NetworksGetEffectiveFirewallsResponse) + assert isinstance(response, compute.Operation) -def test_get_effective_firewalls_rest_required_fields( - request_type=compute.GetEffectiveFirewallsNetworkRequest, -): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteNetworkRequest): transport_class = transports.NetworksRestTransport request_init = {} @@ -1520,7 +1578,7 @@ def test_get_effective_firewalls_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1530,7 +1588,9 @@ def test_get_effective_firewalls_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1546,7 +1606,7 @@ def test_get_effective_firewalls_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NetworksGetEffectiveFirewallsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1557,34 +1617,32 @@ def test_get_effective_firewalls_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworksGetEffectiveFirewallsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_effective_firewalls(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_effective_firewalls_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_effective_firewalls._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "network", @@ -1595,7 +1653,7 @@ def test_get_effective_firewalls_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_effective_firewalls_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -1606,9 +1664,9 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_get_effective_firewalls" + transports.NetworksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_get_effective_firewalls" + transports.NetworksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1623,21 +1681,17 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.NetworksGetEffectiveFirewallsResponse.to_json( - compute.NetworksGetEffectiveFirewallsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetEffectiveFirewallsNetworkRequest() + request = compute.DeleteNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworksGetEffectiveFirewallsResponse + post.return_value = compute.Operation - client.get_effective_firewalls( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1649,8 +1703,8 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_effective_firewalls_rest_bad_request( - transport: str = "rest", request_type=compute.GetEffectiveFirewallsNetworkRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1670,10 +1724,10 @@ def test_get_effective_firewalls_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_effective_firewalls(request) + client.delete_unary(request) -def test_get_effective_firewalls_rest_flattened(): +def test_delete_unary_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1682,7 +1736,7 @@ def test_get_effective_firewalls_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworksGetEffectiveFirewallsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "network": "sample2"} @@ -1697,27 +1751,25 @@ def test_get_effective_firewalls_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworksGetEffectiveFirewallsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_effective_firewalls(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks/{network}/getEffectiveFirewalls" + "%s/compute/v1/projects/{project}/global/networks/{network}" % client.transport._host, args[1], ) -def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1726,14 +1778,14 @@ def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_effective_firewalls( - compute.GetEffectiveFirewallsNetworkRequest(), + client.delete_unary( + compute.DeleteNetworkRequest(), project="project_value", network="network_value", ) -def test_get_effective_firewalls_rest_error(): +def test_delete_unary_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1742,119 +1794,76 @@ def test_get_effective_firewalls_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertNetworkRequest, + compute.GetNetworkRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["network_resource"] = { - "I_pv4_range": "I_pv4_range_value", - "auto_create_subnetworks": True, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable_ula_internal_ipv6": True, - "gateway_i_pv4": "gateway_i_pv4_value", - "id": 205, - "internal_ipv6_range": "internal_ipv6_range_value", - "kind": "kind_value", - "mtu": 342, - "name": "name_value", - "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", - "peerings": [ - { - "auto_create_routes": True, - "exchange_subnet_routes": True, - "export_custom_routes": True, - "export_subnet_routes_with_public_ip": True, - "import_custom_routes": True, - "import_subnet_routes_with_public_ip": True, - "name": "name_value", - "network": "network_value", - "peer_mtu": 865, - "state": "state_value", - "state_details": "state_details_value", - } - ], - "routing_config": {"routing_mode": "routing_mode_value"}, - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], - } + request_init = {"project": "sample1", "network": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Network( + I_pv4_range="I_pv4_range_value", + auto_create_subnetworks=True, creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + enable_ula_internal_ipv6=True, + gateway_i_pv4="gateway_i_pv4_value", id=205, - insert_time="insert_time_value", + internal_ipv6_range="internal_ipv6_range_value", kind="kind_value", + mtu=342, name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + network_firewall_policy_enforcement_order="network_firewall_policy_enforcement_order_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + self_link_with_id="self_link_with_id_value", + subnetworks=["subnetworks_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Network.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Network) + assert response.I_pv4_range == "I_pv4_range_value" + assert response.auto_create_subnetworks is True assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.enable_ula_internal_ipv6 is True + assert response.gateway_i_pv4 == "gateway_i_pv4_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.internal_ipv6_range == "internal_ipv6_range_value" assert response.kind == "kind_value" + assert response.mtu == 342 assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert ( + response.network_firewall_policy_enforcement_order + == "network_firewall_policy_enforcement_order_value" + ) assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.self_link_with_id == "self_link_with_id_value" + assert response.subnetworks == ["subnetworks_value"] -def test_insert_unary_rest_required_fields(request_type=compute.InsertNetworkRequest): +def test_get_rest_required_fields(request_type=compute.GetNetworkRequest): transport_class = transports.NetworksRestTransport request_init = {} + request_init["network"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1867,21 +1876,22 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertNetworkReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["network"] = "network_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -1892,7 +1902,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertNetworkReq request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Network() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1903,36 +1913,35 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertNetworkReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Network.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "networkResource", + "network", "project", ) ) @@ -1940,7 +1949,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -1951,9 +1960,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_insert" + transports.NetworksRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_insert" + transports.NetworksRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1968,17 +1977,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Network.to_json(compute.Network()) - request = compute.InsertNetworkRequest() + request = compute.GetNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Network - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1990,8 +1999,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertNetworkRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1999,11 +2008,2394 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["network_resource"] = { - "I_pv4_range": "I_pv4_range_value", - "auto_create_subnetworks": True, - "creation_timestamp": "creation_timestamp_value", + request_init = {"project": "sample1", "network": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Network() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network="network_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Network.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks/{network}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetNetworkRequest(), + project="project_value", + network="network_value", + ) + + +def test_get_rest_error(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetEffectiveFirewallsNetworkRequest, + dict, + ], +) +def test_get_effective_firewalls_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworksGetEffectiveFirewallsResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworksGetEffectiveFirewallsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_effective_firewalls(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NetworksGetEffectiveFirewallsResponse) + + +def test_get_effective_firewalls_rest_required_fields( + request_type=compute.GetEffectiveFirewallsNetworkRequest, +): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["network"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["network"] = "network_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NetworksGetEffectiveFirewallsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworksGetEffectiveFirewallsResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_effective_firewalls(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_effective_firewalls_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_effective_firewalls._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "network", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_effective_firewalls_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_get_effective_firewalls" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_get_effective_firewalls" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.NetworksGetEffectiveFirewallsResponse.to_json( + compute.NetworksGetEffectiveFirewallsResponse() + ) + ) + + request = compute.GetEffectiveFirewallsNetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NetworksGetEffectiveFirewallsResponse + + client.get_effective_firewalls( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_effective_firewalls_rest_bad_request( + transport: str = "rest", request_type=compute.GetEffectiveFirewallsNetworkRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_effective_firewalls(request) + + +def test_get_effective_firewalls_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworksGetEffectiveFirewallsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network="network_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworksGetEffectiveFirewallsResponse.to_json( + return_value + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_effective_firewalls(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks/{network}/getEffectiveFirewalls" + % client.transport._host, + args[1], + ) + + +def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_effective_firewalls( + compute.GetEffectiveFirewallsNetworkRequest(), + project="project_value", + network="network_value", + ) + + +def test_get_effective_firewalls_rest_error(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertNetworkRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertNetworkRequest): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertNetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNetworkRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks" % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertNetworkRequest(), + project="project_value", + network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), + ) + + +def test_insert_rest_error(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertNetworkRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertNetworkRequest): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertNetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNetworkRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks" % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertNetworkRequest(), + project="project_value", + network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), + ) + + +def test_insert_unary_rest_error(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListNetworksRequest, + dict, + ], +) +def test_list_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListNetworksRequest): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NetworkList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NetworkList.to_json(compute.NetworkList()) + + request = compute.ListNetworksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NetworkList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListNetworksRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks" % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListNetworksRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.NetworkList( + items=[ + compute.Network(), + compute.Network(), + compute.Network(), + ], + next_page_token="abc", + ), + compute.NetworkList( + items=[], + next_page_token="def", + ), + compute.NetworkList( + items=[ + compute.Network(), + ], + next_page_token="ghi", + ), + compute.NetworkList( + items=[ + compute.Network(), + compute.Network(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.NetworkList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Network) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPeeringRoutesNetworksRequest, + dict, + ], +) +def test_list_peering_routes_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ExchangedPeeringRoutesList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ExchangedPeeringRoutesList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_peering_routes(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPeeringRoutesPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_peering_routes_rest_required_fields( + request_type=compute.ListPeeringRoutesNetworksRequest, +): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["network"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_peering_routes._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["network"] = "network_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_peering_routes._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "direction", + "filter", + "max_results", + "order_by", + "page_token", + "peering_name", + "region", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ExchangedPeeringRoutesList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ExchangedPeeringRoutesList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_peering_routes(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_peering_routes_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_peering_routes._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "direction", + "filter", + "maxResults", + "orderBy", + "pageToken", + "peeringName", + "region", + "returnPartialSuccess", + ) + ) + & set( + ( + "network", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_peering_routes_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_list_peering_routes" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_list_peering_routes" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ExchangedPeeringRoutesList.to_json( + compute.ExchangedPeeringRoutesList() + ) + + request = compute.ListPeeringRoutesNetworksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ExchangedPeeringRoutesList + + client.list_peering_routes( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_peering_routes_rest_bad_request( + transport: str = "rest", request_type=compute.ListPeeringRoutesNetworksRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_peering_routes(request) + + +def test_list_peering_routes_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ExchangedPeeringRoutesList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network="network_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ExchangedPeeringRoutesList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_peering_routes(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks/{network}/listPeeringRoutes" + % client.transport._host, + args[1], + ) + + +def test_list_peering_routes_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_peering_routes( + compute.ListPeeringRoutesNetworksRequest(), + project="project_value", + network="network_value", + ) + + +def test_list_peering_routes_rest_pager(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ExchangedPeeringRoutesList( + items=[ + compute.ExchangedPeeringRoute(), + compute.ExchangedPeeringRoute(), + compute.ExchangedPeeringRoute(), + ], + next_page_token="abc", + ), + compute.ExchangedPeeringRoutesList( + items=[], + next_page_token="def", + ), + compute.ExchangedPeeringRoutesList( + items=[ + compute.ExchangedPeeringRoute(), + ], + next_page_token="ghi", + ), + compute.ExchangedPeeringRoutesList( + items=[ + compute.ExchangedPeeringRoute(), + compute.ExchangedPeeringRoute(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.ExchangedPeeringRoutesList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "network": "sample2"} + + pager = client.list_peering_routes(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ExchangedPeeringRoute) for i in results) + + pages = list(client.list_peering_routes(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchNetworkRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchNetworkRequest): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["network"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["network"] = "network_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "network", + "networkResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchNetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNetworkRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "network": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + network="network_value", + network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/networks/{network}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchNetworkRequest(), + project="project_value", + network="network_value", + network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), + ) + + +def test_patch_rest_error(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchNetworkRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_ula_internal_ipv6": True, + "gateway_i_pv4": "gateway_i_pv4_value", + "id": 205, + "internal_ipv6_range": "internal_ipv6_range_value", + "kind": "kind_value", + "mtu": 342, + "name": "name_value", + "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", + "peerings": [ + { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + ], + "routing_config": {"routing_mode": "routing_mode_value"}, + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields(request_type=compute.PatchNetworkRequest): + transport_class = transports.NetworksRestTransport + + request_init = {} + request_init["network"] = "" + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["network"] = "network_value" + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "network", + "networkResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.NetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), + ) + client = NetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NetworksRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.NetworksRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchNetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNetworkRequest +): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "network": "sample2"} + request_init["network_resource"] = { + "I_pv4_range": "I_pv4_range_value", + "auto_create_subnetworks": True, + "creation_timestamp": "creation_timestamp_value", "description": "description_value", "enable_ula_internal_ipv6": True, "gateway_i_pv4": "gateway_i_pv4_value", @@ -2044,10 +4436,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch_unary(request) -def test_insert_unary_rest_flattened(): +def test_patch_unary_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2059,11 +4451,12 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "network": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + network="network_value", network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), ) mock_args.update(sample_request) @@ -2076,19 +4469,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks" % client.transport._host, + "%s/compute/v1/projects/{project}/global/networks/{network}" + % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2097,14 +4491,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertNetworkRequest(), + client.patch_unary( + compute.PatchNetworkRequest(), project="project_value", + network="network_value", network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), ) -def test_insert_unary_rest_error(): +def test_patch_unary_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2113,50 +4508,90 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListNetworksRequest, + compute.RemovePeeringNetworkRequest, dict, ], ) -def test_list_rest(request_type): +def test_remove_peering_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_remove_peering_request_resource"] = {"name": "name_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.remove_peering(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListNetworksRequest): +def test_remove_peering_rest_required_fields( + request_type=compute.RemovePeeringNetworkRequest, +): transport_class = transports.NetworksRestTransport request_init = {} + request_init["network"] = "" request_init["project"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2169,29 +4604,24 @@ def test_list_rest_required_fields(request_type=compute.ListNetworksRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).remove_peering._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["network"] = "network_value" jsonified_request["project"] = "project_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).remove_peering._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" @@ -2202,7 +4632,7 @@ def test_list_rest_required_fields(request_type=compute.ListNetworksRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NetworkList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2213,46 +4643,45 @@ def test_list_rest_required_fields(request_type=compute.ListNetworksRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.remove_peering(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_remove_peering_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.remove_peering._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "network", + "networksRemovePeeringRequestResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_remove_peering_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -2263,9 +4692,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_list" + transports.NetworksRestInterceptor, "post_remove_peering" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_list" + transports.NetworksRestInterceptor, "pre_remove_peering" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2280,17 +4709,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NetworkList.to_json(compute.NetworkList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListNetworksRequest() + request = compute.RemovePeeringNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkList + post.return_value = compute.Operation - client.list( + client.remove_peering( request, metadata=[ ("key", "val"), @@ -2302,8 +4731,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListNetworksRequest +def test_remove_peering_rest_bad_request( + transport: str = "rest", request_type=compute.RemovePeeringNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2311,7 +4740,8 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_remove_peering_request_resource"] = {"name": "name_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2323,10 +4753,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.remove_peering(request) -def test_list_rest_flattened(): +def test_remove_peering_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2335,38 +4765,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "network": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + network="network_value", + networks_remove_peering_request_resource=compute.NetworksRemovePeeringRequest( + name="name_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.remove_peering(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks" % client.transport._host, + "%s/compute/v1/projects/{project}/global/networks/{network}/removePeering" + % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_remove_peering_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2375,81 +4810,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListNetworksRequest(), - project="project_value", - ) - - -def test_list_rest_pager(transport: str = "rest"): - client = NetworksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.NetworkList( - items=[ - compute.Network(), - compute.Network(), - compute.Network(), - ], - next_page_token="abc", - ), - compute.NetworkList( - items=[], - next_page_token="def", - ), - compute.NetworkList( - items=[ - compute.Network(), - ], - next_page_token="ghi", - ), - compute.NetworkList( - items=[ - compute.Network(), - compute.Network(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.NetworkList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) + client.remove_peering( + compute.RemovePeeringNetworkRequest(), + project="project_value", + network="network_value", + networks_remove_peering_request_resource=compute.NetworksRemovePeeringRequest( + name="name_value" + ), + ) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Network) for i in results) - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token +def test_remove_peering_rest_error(): + client = NetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) @pytest.mark.parametrize( "request_type", [ - compute.ListPeeringRoutesNetworksRequest, + compute.RemovePeeringNetworkRequest, dict, ], ) -def test_list_peering_routes_rest(request_type): +def test_remove_peering_unary_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2457,36 +4841,51 @@ def test_list_peering_routes_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_remove_peering_request_resource"] = {"name": "name_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ExchangedPeeringRoutesList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExchangedPeeringRoutesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_peering_routes(request) + response = client.remove_peering_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPeeringRoutesPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_peering_routes_rest_required_fields( - request_type=compute.ListPeeringRoutesNetworksRequest, +def test_remove_peering_unary_rest_required_fields( + request_type=compute.RemovePeeringNetworkRequest, ): transport_class = transports.NetworksRestTransport @@ -2504,7 +4903,7 @@ def test_list_peering_routes_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_peering_routes._get_unset_required_fields(jsonified_request) + ).remove_peering._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2514,20 +4913,9 @@ def test_list_peering_routes_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_peering_routes._get_unset_required_fields(jsonified_request) + ).remove_peering._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "direction", - "filter", - "max_results", - "order_by", - "page_token", - "peering_name", - "region", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2543,7 +4931,7 @@ def test_list_peering_routes_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ExchangedPeeringRoutesList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2554,46 +4942,37 @@ def test_list_peering_routes_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExchangedPeeringRoutesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_peering_routes(request) + response = client.remove_peering_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_peering_routes_rest_unset_required_fields(): +def test_remove_peering_unary_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_peering_routes._get_unset_required_fields({}) + unset_fields = transport.remove_peering._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "direction", - "filter", - "maxResults", - "orderBy", - "pageToken", - "peeringName", - "region", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "network", + "networksRemovePeeringRequestResource", "project", ) ) @@ -2601,7 +4980,7 @@ def test_list_peering_routes_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_peering_routes_rest_interceptors(null_interceptor): +def test_remove_peering_unary_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -2612,9 +4991,9 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_list_peering_routes" + transports.NetworksRestInterceptor, "post_remove_peering" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_list_peering_routes" + transports.NetworksRestInterceptor, "pre_remove_peering" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2629,19 +5008,17 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ExchangedPeeringRoutesList.to_json( - compute.ExchangedPeeringRoutesList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPeeringRoutesNetworksRequest() + request = compute.RemovePeeringNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ExchangedPeeringRoutesList + post.return_value = compute.Operation - client.list_peering_routes( + client.remove_peering_unary( request, metadata=[ ("key", "val"), @@ -2653,8 +5030,8 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_peering_routes_rest_bad_request( - transport: str = "rest", request_type=compute.ListPeeringRoutesNetworksRequest +def test_remove_peering_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemovePeeringNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2663,6 +5040,7 @@ def test_list_peering_routes_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_remove_peering_request_resource"] = {"name": "name_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2674,10 +5052,10 @@ def test_list_peering_routes_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_peering_routes(request) + client.remove_peering_unary(request) -def test_list_peering_routes_rest_flattened(): +def test_remove_peering_unary_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2686,7 +5064,7 @@ def test_list_peering_routes_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ExchangedPeeringRoutesList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "network": "sample2"} @@ -2695,31 +5073,34 @@ def test_list_peering_routes_rest_flattened(): mock_args = dict( project="project_value", network="network_value", + networks_remove_peering_request_resource=compute.NetworksRemovePeeringRequest( + name="name_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ExchangedPeeringRoutesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_peering_routes(**mock_args) + client.remove_peering_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks/{network}/listPeeringRoutes" + "%s/compute/v1/projects/{project}/global/networks/{network}/removePeering" % client.transport._host, args[1], ) -def test_list_peering_routes_rest_flattened_error(transport: str = "rest"): +def test_remove_peering_unary_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2728,84 +5109,30 @@ def test_list_peering_routes_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_peering_routes( - compute.ListPeeringRoutesNetworksRequest(), + client.remove_peering_unary( + compute.RemovePeeringNetworkRequest(), project="project_value", network="network_value", + networks_remove_peering_request_resource=compute.NetworksRemovePeeringRequest( + name="name_value" + ), ) -def test_list_peering_routes_rest_pager(transport: str = "rest"): +def test_remove_peering_unary_rest_error(): client = NetworksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ExchangedPeeringRoutesList( - items=[ - compute.ExchangedPeeringRoute(), - compute.ExchangedPeeringRoute(), - compute.ExchangedPeeringRoute(), - ], - next_page_token="abc", - ), - compute.ExchangedPeeringRoutesList( - items=[], - next_page_token="def", - ), - compute.ExchangedPeeringRoutesList( - items=[ - compute.ExchangedPeeringRoute(), - ], - next_page_token="ghi", - ), - compute.ExchangedPeeringRoutesList( - items=[ - compute.ExchangedPeeringRoute(), - compute.ExchangedPeeringRoute(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.ExchangedPeeringRoutesList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "network": "sample2"} - - pager = client.list_peering_routes(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ExchangedPeeringRoute) for i in results) - - pages = list(client.list_peering_routes(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchNetworkRequest, + compute.SwitchToCustomModeNetworkRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_switch_to_custom_mode_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2813,39 +5140,6 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} - request_init["network_resource"] = { - "I_pv4_range": "I_pv4_range_value", - "auto_create_subnetworks": True, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable_ula_internal_ipv6": True, - "gateway_i_pv4": "gateway_i_pv4_value", - "id": 205, - "internal_ipv6_range": "internal_ipv6_range_value", - "kind": "kind_value", - "mtu": 342, - "name": "name_value", - "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", - "peerings": [ - { - "auto_create_routes": True, - "exchange_subnet_routes": True, - "export_custom_routes": True, - "export_subnet_routes_with_public_ip": True, - "import_custom_routes": True, - "import_subnet_routes_with_public_ip": True, - "name": "name_value", - "network": "network_value", - "peer_mtu": 865, - "state": "state_value", - "state_details": "state_details_value", - } - ], - "routing_config": {"routing_mode": "routing_mode_value"}, - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2882,10 +5176,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.switch_to_custom_mode(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2910,7 +5204,9 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchNetworkRequest): +def test_switch_to_custom_mode_rest_required_fields( + request_type=compute.SwitchToCustomModeNetworkRequest, +): transport_class = transports.NetworksRestTransport request_init = {} @@ -2927,7 +5223,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNetworkReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).switch_to_custom_mode._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2937,7 +5233,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNetworkReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).switch_to_custom_mode._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2966,10 +5262,9 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNetworkReque # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2978,25 +5273,24 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNetworkReque response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.switch_to_custom_mode(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_switch_to_custom_mode_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.switch_to_custom_mode._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "network", - "networkResource", "project", ) ) @@ -3004,7 +5298,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_switch_to_custom_mode_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -3015,9 +5309,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_patch" + transports.NetworksRestInterceptor, "post_switch_to_custom_mode" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_patch" + transports.NetworksRestInterceptor, "pre_switch_to_custom_mode" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3034,7 +5328,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchNetworkRequest() + request = compute.SwitchToCustomModeNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3042,7 +5336,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.switch_to_custom_mode( request, metadata=[ ("key", "val"), @@ -3054,8 +5348,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchNetworkRequest +def test_switch_to_custom_mode_rest_bad_request( + transport: str = "rest", request_type=compute.SwitchToCustomModeNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3064,39 +5358,6 @@ def test_patch_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} - request_init["network_resource"] = { - "I_pv4_range": "I_pv4_range_value", - "auto_create_subnetworks": True, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable_ula_internal_ipv6": True, - "gateway_i_pv4": "gateway_i_pv4_value", - "id": 205, - "internal_ipv6_range": "internal_ipv6_range_value", - "kind": "kind_value", - "mtu": 342, - "name": "name_value", - "network_firewall_policy_enforcement_order": "network_firewall_policy_enforcement_order_value", - "peerings": [ - { - "auto_create_routes": True, - "exchange_subnet_routes": True, - "export_custom_routes": True, - "export_subnet_routes_with_public_ip": True, - "import_custom_routes": True, - "import_subnet_routes_with_public_ip": True, - "name": "name_value", - "network": "network_value", - "peer_mtu": 865, - "state": "state_value", - "state_details": "state_details_value", - } - ], - "routing_config": {"routing_mode": "routing_mode_value"}, - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "subnetworks": ["subnetworks_value_1", "subnetworks_value_2"], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3108,10 +5369,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.switch_to_custom_mode(request) -def test_patch_unary_rest_flattened(): +def test_switch_to_custom_mode_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3129,7 +5390,6 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", network="network_value", - network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), ) mock_args.update(sample_request) @@ -3141,20 +5401,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.switch_to_custom_mode(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks/{network}" + "%s/compute/v1/projects/{project}/global/networks/{network}/switchToCustomMode" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_switch_to_custom_mode_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3163,15 +5423,14 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchNetworkRequest(), + client.switch_to_custom_mode( + compute.SwitchToCustomModeNetworkRequest(), project="project_value", network="network_value", - network_resource=compute.Network(I_pv4_range="I_pv4_range_value"), ) -def test_patch_unary_rest_error(): +def test_switch_to_custom_mode_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3180,11 +5439,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RemovePeeringNetworkRequest, + compute.SwitchToCustomModeNetworkRequest, dict, ], ) -def test_remove_peering_unary_rest(request_type): +def test_switch_to_custom_mode_unary_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3192,7 +5451,6 @@ def test_remove_peering_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} - request_init["networks_remove_peering_request_resource"] = {"name": "name_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3229,36 +5487,14 @@ def test_remove_peering_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_peering_unary(request) + response = client.switch_to_custom_mode_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_remove_peering_unary_rest_required_fields( - request_type=compute.RemovePeeringNetworkRequest, +def test_switch_to_custom_mode_unary_rest_required_fields( + request_type=compute.SwitchToCustomModeNetworkRequest, ): transport_class = transports.NetworksRestTransport @@ -3276,7 +5512,7 @@ def test_remove_peering_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_peering._get_unset_required_fields(jsonified_request) + ).switch_to_custom_mode._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3286,7 +5522,7 @@ def test_remove_peering_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_peering._get_unset_required_fields(jsonified_request) + ).switch_to_custom_mode._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3318,7 +5554,6 @@ def test_remove_peering_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3327,25 +5562,24 @@ def test_remove_peering_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_peering_unary(request) + response = client.switch_to_custom_mode_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_peering_unary_rest_unset_required_fields(): +def test_switch_to_custom_mode_unary_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_peering._get_unset_required_fields({}) + unset_fields = transport.switch_to_custom_mode._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "network", - "networksRemovePeeringRequestResource", "project", ) ) @@ -3353,7 +5587,7 @@ def test_remove_peering_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_peering_unary_rest_interceptors(null_interceptor): +def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -3364,9 +5598,9 @@ def test_remove_peering_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_remove_peering" + transports.NetworksRestInterceptor, "post_switch_to_custom_mode" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_remove_peering" + transports.NetworksRestInterceptor, "pre_switch_to_custom_mode" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3383,7 +5617,7 @@ def test_remove_peering_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemovePeeringNetworkRequest() + request = compute.SwitchToCustomModeNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3391,7 +5625,7 @@ def test_remove_peering_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_peering_unary( + client.switch_to_custom_mode_unary( request, metadata=[ ("key", "val"), @@ -3403,8 +5637,8 @@ def test_remove_peering_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_peering_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemovePeeringNetworkRequest +def test_switch_to_custom_mode_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SwitchToCustomModeNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3413,7 +5647,6 @@ def test_remove_peering_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} - request_init["networks_remove_peering_request_resource"] = {"name": "name_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3425,10 +5658,10 @@ def test_remove_peering_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_peering_unary(request) + client.switch_to_custom_mode_unary(request) -def test_remove_peering_unary_rest_flattened(): +def test_switch_to_custom_mode_unary_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3446,9 +5679,6 @@ def test_remove_peering_unary_rest_flattened(): mock_args = dict( project="project_value", network="network_value", - networks_remove_peering_request_resource=compute.NetworksRemovePeeringRequest( - name="name_value" - ), ) mock_args.update(sample_request) @@ -3460,20 +5690,20 @@ def test_remove_peering_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_peering_unary(**mock_args) + client.switch_to_custom_mode_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks/{network}/removePeering" + "%s/compute/v1/projects/{project}/global/networks/{network}/switchToCustomMode" % client.transport._host, args[1], ) -def test_remove_peering_unary_rest_flattened_error(transport: str = "rest"): +def test_switch_to_custom_mode_unary_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3482,17 +5712,14 @@ def test_remove_peering_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_peering_unary( - compute.RemovePeeringNetworkRequest(), + client.switch_to_custom_mode_unary( + compute.SwitchToCustomModeNetworkRequest(), project="project_value", network="network_value", - networks_remove_peering_request_resource=compute.NetworksRemovePeeringRequest( - name="name_value" - ), ) -def test_remove_peering_unary_rest_error(): +def test_switch_to_custom_mode_unary_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3501,11 +5728,11 @@ def test_remove_peering_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SwitchToCustomModeNetworkRequest, + compute.UpdatePeeringNetworkRequest, dict, ], ) -def test_switch_to_custom_mode_unary_rest(request_type): +def test_update_peering_rest(request_type): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3513,6 +5740,21 @@ def test_switch_to_custom_mode_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_update_peering_request_resource"] = { + "network_peering": { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3549,10 +5791,10 @@ def test_switch_to_custom_mode_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.switch_to_custom_mode_unary(request) + response = client.update_peering(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3577,8 +5819,8 @@ def test_switch_to_custom_mode_unary_rest(request_type): assert response.zone == "zone_value" -def test_switch_to_custom_mode_unary_rest_required_fields( - request_type=compute.SwitchToCustomModeNetworkRequest, +def test_update_peering_rest_required_fields( + request_type=compute.UpdatePeeringNetworkRequest, ): transport_class = transports.NetworksRestTransport @@ -3596,7 +5838,7 @@ def test_switch_to_custom_mode_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).switch_to_custom_mode._get_unset_required_fields(jsonified_request) + ).update_peering._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3606,7 +5848,7 @@ def test_switch_to_custom_mode_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).switch_to_custom_mode._get_unset_required_fields(jsonified_request) + ).update_peering._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3635,9 +5877,10 @@ def test_switch_to_custom_mode_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3646,24 +5889,25 @@ def test_switch_to_custom_mode_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.switch_to_custom_mode_unary(request) + response = client.update_peering(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_switch_to_custom_mode_unary_rest_unset_required_fields(): +def test_update_peering_rest_unset_required_fields(): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.switch_to_custom_mode._get_unset_required_fields({}) + unset_fields = transport.update_peering._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "network", + "networksUpdatePeeringRequestResource", "project", ) ) @@ -3671,7 +5915,7 @@ def test_switch_to_custom_mode_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): +def test_update_peering_rest_interceptors(null_interceptor): transport = transports.NetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.NetworksRestInterceptor(), @@ -3682,9 +5926,9 @@ def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NetworksRestInterceptor, "post_switch_to_custom_mode" + transports.NetworksRestInterceptor, "post_update_peering" ) as post, mock.patch.object( - transports.NetworksRestInterceptor, "pre_switch_to_custom_mode" + transports.NetworksRestInterceptor, "pre_update_peering" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3701,7 +5945,7 @@ def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SwitchToCustomModeNetworkRequest() + request = compute.UpdatePeeringNetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3709,7 +5953,7 @@ def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.switch_to_custom_mode_unary( + client.update_peering( request, metadata=[ ("key", "val"), @@ -3721,8 +5965,8 @@ def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_switch_to_custom_mode_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SwitchToCustomModeNetworkRequest +def test_update_peering_rest_bad_request( + transport: str = "rest", request_type=compute.UpdatePeeringNetworkRequest ): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3731,6 +5975,21 @@ def test_switch_to_custom_mode_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "network": "sample2"} + request_init["networks_update_peering_request_resource"] = { + "network_peering": { + "auto_create_routes": True, + "exchange_subnet_routes": True, + "export_custom_routes": True, + "export_subnet_routes_with_public_ip": True, + "import_custom_routes": True, + "import_subnet_routes_with_public_ip": True, + "name": "name_value", + "network": "network_value", + "peer_mtu": 865, + "state": "state_value", + "state_details": "state_details_value", + } + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3742,10 +6001,10 @@ def test_switch_to_custom_mode_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.switch_to_custom_mode_unary(request) + client.update_peering(request) -def test_switch_to_custom_mode_unary_rest_flattened(): +def test_update_peering_rest_flattened(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3763,6 +6022,9 @@ def test_switch_to_custom_mode_unary_rest_flattened(): mock_args = dict( project="project_value", network="network_value", + networks_update_peering_request_resource=compute.NetworksUpdatePeeringRequest( + network_peering=compute.NetworkPeering(auto_create_routes=True) + ), ) mock_args.update(sample_request) @@ -3774,20 +6036,20 @@ def test_switch_to_custom_mode_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.switch_to_custom_mode_unary(**mock_args) + client.update_peering(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/networks/{network}/switchToCustomMode" + "%s/compute/v1/projects/{project}/global/networks/{network}/updatePeering" % client.transport._host, args[1], ) -def test_switch_to_custom_mode_unary_rest_flattened_error(transport: str = "rest"): +def test_update_peering_rest_flattened_error(transport: str = "rest"): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3796,14 +6058,17 @@ def test_switch_to_custom_mode_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.switch_to_custom_mode_unary( - compute.SwitchToCustomModeNetworkRequest(), + client.update_peering( + compute.UpdatePeeringNetworkRequest(), project="project_value", network="network_value", + networks_update_peering_request_resource=compute.NetworksUpdatePeeringRequest( + network_peering=compute.NetworkPeering(auto_create_routes=True) + ), ) -def test_switch_to_custom_mode_unary_rest_error(): +def test_update_peering_rest_error(): client = NetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3879,28 +6144,6 @@ def test_update_peering_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_peering_unary_rest_required_fields( @@ -4233,6 +6476,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NetworksClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_networks_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4274,6 +6530,14 @@ def test_networks_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_networks_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_node_groups.py b/tests/unit/gapic/compute_v1/test_node_groups.py index 6d1be053f..2a017d2a6 100644 --- a/tests/unit/gapic/compute_v1/test_node_groups.py +++ b/tests/unit/gapic/compute_v1/test_node_groups.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -516,7 +518,7 @@ def test_node_groups_client_client_options_credentials_file( dict, ], ) -def test_add_nodes_unary_rest(request_type): +def test_add_nodes_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -563,10 +565,10 @@ def test_add_nodes_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_nodes_unary(request) + response = client.add_nodes(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -591,9 +593,7 @@ def test_add_nodes_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_nodes_unary_rest_required_fields( - request_type=compute.AddNodesNodeGroupRequest, -): +def test_add_nodes_rest_required_fields(request_type=compute.AddNodesNodeGroupRequest): transport_class = transports.NodeGroupsRestTransport request_init = {} @@ -665,14 +665,14 @@ def test_add_nodes_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_nodes_unary(request) + response = client.add_nodes(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_nodes_unary_rest_unset_required_fields(): +def test_add_nodes_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -692,7 +692,7 @@ def test_add_nodes_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_nodes_unary_rest_interceptors(null_interceptor): +def test_add_nodes_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -732,7 +732,7 @@ def test_add_nodes_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_nodes_unary( + client.add_nodes( request, metadata=[ ("key", "val"), @@ -744,7 +744,7 @@ def test_add_nodes_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_nodes_unary_rest_bad_request( +def test_add_nodes_rest_bad_request( transport: str = "rest", request_type=compute.AddNodesNodeGroupRequest ): client = NodeGroupsClient( @@ -768,10 +768,10 @@ def test_add_nodes_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_nodes_unary(request) + client.add_nodes(request) -def test_add_nodes_unary_rest_flattened(): +def test_add_nodes_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -808,7 +808,7 @@ def test_add_nodes_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_nodes_unary(**mock_args) + client.add_nodes(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -821,7 +821,7 @@ def test_add_nodes_unary_rest_flattened(): ) -def test_add_nodes_unary_rest_flattened_error(transport: str = "rest"): +def test_add_nodes_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -830,7 +830,7 @@ def test_add_nodes_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_nodes_unary( + client.add_nodes( compute.AddNodesNodeGroupRequest(), project="project_value", zone="zone_value", @@ -841,7 +841,7 @@ def test_add_nodes_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_nodes_unary_rest_error(): +def test_add_nodes_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -850,55 +850,72 @@ def test_add_nodes_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListNodeGroupsRequest, + compute.AddNodesNodeGroupRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_nodes_unary_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_add_nodes_request_resource"] = { + "additional_node_count": 2214 + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_nodes_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert isinstance(response, compute.Operation) -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListNodeGroupsRequest, +def test_add_nodes_unary_rest_required_fields( + request_type=compute.AddNodesNodeGroupRequest, ): transport_class = transports.NodeGroupsRestTransport request_init = {} + request_init["node_group"] = "" request_init["project"] = "" + request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -910,32 +927,29 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_nodes._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_nodes._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -944,7 +958,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -955,47 +969,46 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_nodes_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_nodes_unary_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_nodes._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "nodeGroup", + "nodeGroupsAddNodesRequestResource", + "project", + "zone", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_nodes_unary_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1008,9 +1021,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_aggregated_list" + transports.NodeGroupsRestInterceptor, "post_add_nodes" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_aggregated_list" + transports.NodeGroupsRestInterceptor, "pre_add_nodes" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1025,19 +1038,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NodeGroupAggregatedList.to_json( - compute.NodeGroupAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListNodeGroupsRequest() + request = compute.AddNodesNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroupAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_nodes_unary( request, metadata=[ ("key", "val"), @@ -1049,8 +1060,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListNodeGroupsRequest +def test_add_nodes_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddNodesNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1058,7 +1069,10 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_add_nodes_request_resource"] = { + "additional_node_count": 2214 + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1070,10 +1084,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_nodes_unary(request) -def test_aggregated_list_rest_flattened(): +def test_add_nodes_unary_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1082,39 +1096,48 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", + zone="zone_value", + node_group="node_group_value", + node_groups_add_nodes_request_resource=compute.NodeGroupsAddNodesRequest( + additional_node_count=2214 + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_nodes_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/nodeGroups" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/addNodes" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_nodes_unary_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1123,168 +1146,75 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListNodeGroupsRequest(), + client.add_nodes_unary( + compute.AddNodesNodeGroupRequest(), project="project_value", + zone="zone_value", + node_group="node_group_value", + node_groups_add_nodes_request_resource=compute.NodeGroupsAddNodesRequest( + additional_node_count=2214 + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_nodes_unary_rest_error(): client = NodeGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.NodeGroupAggregatedList( - items={ - "a": compute.NodeGroupsScopedList(), - "b": compute.NodeGroupsScopedList(), - "c": compute.NodeGroupsScopedList(), - }, - next_page_token="abc", - ), - compute.NodeGroupAggregatedList( - items={}, - next_page_token="def", - ), - compute.NodeGroupAggregatedList( - items={ - "g": compute.NodeGroupsScopedList(), - }, - next_page_token="ghi", - ), - compute.NodeGroupAggregatedList( - items={ - "h": compute.NodeGroupsScopedList(), - "i": compute.NodeGroupsScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.NodeGroupAggregatedList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.NodeGroupsScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == (str, compute.NodeGroupsScopedList) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.NodeGroupsScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.DeleteNodeGroupRequest, + compute.AggregatedListNodeGroupsRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_aggregated_list_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.NodeGroupAggregatedList( + id="id_value", kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NodeGroupAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_delete_unary_rest_required_fields(request_type=compute.DeleteNodeGroupRequest): +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListNodeGroupsRequest, +): transport_class = transports.NodeGroupsRestTransport request_init = {} - request_init["node_group"] = "" request_init["project"] = "" - request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1296,29 +1226,32 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNodeGroupR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" - jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "nodeGroup" in jsonified_request - assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "zone" in jsonified_request - assert jsonified_request["zone"] == "zone_value" client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1327,7 +1260,7 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNodeGroupR request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NodeGroupAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1338,44 +1271,47 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteNodeGroupR # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NodeGroupAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "nodeGroup", - "project", - "zone", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1388,9 +1324,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_delete" + transports.NodeGroupsRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_delete" + transports.NodeGroupsRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1405,17 +1341,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.NodeGroupAggregatedList.to_json( + compute.NodeGroupAggregatedList() + ) - request = compute.DeleteNodeGroupRequest() + request = compute.AggregatedListNodeGroupsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.NodeGroupAggregatedList - client.delete_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -1427,8 +1365,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteNodeGroupRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListNodeGroupsRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1436,7 +1374,7 @@ def test_delete_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1448,10 +1386,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.aggregated_list(request) -def test_delete_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1460,45 +1398,39 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NodeGroupAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "node_group": "sample3", - } + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - zone="zone_value", - node_group="node_group_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NodeGroupAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}" + "%s/compute/v1/projects/{project}/aggregated/nodeGroups" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1507,28 +1439,90 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteNodeGroupRequest(), + client.aggregated_list( + compute.AggregatedListNodeGroupsRequest(), project="project_value", - zone="zone_value", - node_group="node_group_value", ) -def test_delete_unary_rest_error(): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = NodeGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.NodeGroupAggregatedList( + items={ + "a": compute.NodeGroupsScopedList(), + "b": compute.NodeGroupsScopedList(), + "c": compute.NodeGroupsScopedList(), + }, + next_page_token="abc", + ), + compute.NodeGroupAggregatedList( + items={}, + next_page_token="def", + ), + compute.NodeGroupAggregatedList( + items={ + "g": compute.NodeGroupsScopedList(), + }, + next_page_token="ghi", + ), + compute.NodeGroupAggregatedList( + items={ + "h": compute.NodeGroupsScopedList(), + "i": compute.NodeGroupsScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.NodeGroupAggregatedList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.NodeGroupsScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == (str, compute.NodeGroupsScopedList) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.NodeGroupsScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.DeleteNodesNodeGroupRequest, + compute.DeleteNodeGroupRequest, dict, ], ) -def test_delete_nodes_unary_rest(request_type): +def test_delete_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1536,9 +1530,6 @@ def test_delete_nodes_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} - request_init["node_groups_delete_nodes_request_resource"] = { - "nodes": ["nodes_value_1", "nodes_value_2"] - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1575,10 +1566,10 @@ def test_delete_nodes_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_nodes_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1603,9 +1594,7 @@ def test_delete_nodes_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_nodes_unary_rest_required_fields( - request_type=compute.DeleteNodesNodeGroupRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteNodeGroupRequest): transport_class = transports.NodeGroupsRestTransport request_init = {} @@ -1623,7 +1612,7 @@ def test_delete_nodes_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_nodes._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1634,7 +1623,7 @@ def test_delete_nodes_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_nodes._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1665,10 +1654,9 @@ def test_delete_nodes_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1677,25 +1665,24 @@ def test_delete_nodes_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_nodes_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_nodes_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_nodes._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "nodeGroup", - "nodeGroupsDeleteNodesRequestResource", "project", "zone", ) @@ -1704,7 +1691,7 @@ def test_delete_nodes_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_nodes_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1717,9 +1704,9 @@ def test_delete_nodes_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_delete_nodes" + transports.NodeGroupsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_delete_nodes" + transports.NodeGroupsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1736,7 +1723,7 @@ def test_delete_nodes_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteNodesNodeGroupRequest() + request = compute.DeleteNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1744,7 +1731,7 @@ def test_delete_nodes_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_nodes_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1756,8 +1743,8 @@ def test_delete_nodes_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_nodes_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteNodesNodeGroupRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1766,9 +1753,6 @@ def test_delete_nodes_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} - request_init["node_groups_delete_nodes_request_resource"] = { - "nodes": ["nodes_value_1", "nodes_value_2"] - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1780,10 +1764,10 @@ def test_delete_nodes_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_nodes_unary(request) + client.delete(request) -def test_delete_nodes_unary_rest_flattened(): +def test_delete_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1806,9 +1790,6 @@ def test_delete_nodes_unary_rest_flattened(): project="project_value", zone="zone_value", node_group="node_group_value", - node_groups_delete_nodes_request_resource=compute.NodeGroupsDeleteNodesRequest( - nodes=["nodes_value"] - ), ) mock_args.update(sample_request) @@ -1820,20 +1801,20 @@ def test_delete_nodes_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_nodes_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/deleteNodes" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}" % client.transport._host, args[1], ) -def test_delete_nodes_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1842,18 +1823,15 @@ def test_delete_nodes_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_nodes_unary( - compute.DeleteNodesNodeGroupRequest(), + client.delete( + compute.DeleteNodeGroupRequest(), project="project_value", zone="zone_value", node_group="node_group_value", - node_groups_delete_nodes_request_resource=compute.NodeGroupsDeleteNodesRequest( - nodes=["nodes_value"] - ), ) -def test_delete_nodes_unary_rest_error(): +def test_delete_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1862,11 +1840,11 @@ def test_delete_nodes_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNodeGroupRequest, + compute.DeleteNodeGroupRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1879,48 +1857,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroup( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - location_hint="location_hint_value", - maintenance_policy="maintenance_policy_value", name="name_value", - node_template="node_template_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - size=443, - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NodeGroup) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.location_hint == "location_hint_value" - assert response.maintenance_policy == "maintenance_policy_value" - assert response.name == "name_value" - assert response.node_template == "node_template_value" - assert response.self_link == "self_link_value" - assert response.size == 443 - assert response.status == "status_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetNodeGroupRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteNodeGroupRequest): transport_class = transports.NodeGroupsRestTransport request_init = {} @@ -1938,7 +1912,7 @@ def test_get_rest_required_fields(request_type=compute.GetNodeGroupRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1949,7 +1923,9 @@ def test_get_rest_required_fields(request_type=compute.GetNodeGroupRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1967,7 +1943,7 @@ def test_get_rest_required_fields(request_type=compute.GetNodeGroupRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NodeGroup() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1978,32 +1954,32 @@ def test_get_rest_required_fields(request_type=compute.GetNodeGroupRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "nodeGroup", @@ -2015,7 +1991,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2028,9 +2004,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_get" + transports.NodeGroupsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_get" + transports.NodeGroupsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2045,17 +2021,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NodeGroup.to_json(compute.NodeGroup()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetNodeGroupRequest() + request = compute.DeleteNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroup + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2067,8 +2043,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetNodeGroupRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2088,10 +2064,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2100,7 +2076,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroup() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -2120,12 +2096,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2138,7 +2114,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2147,15 +2123,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetNodeGroupRequest(), + client.delete_unary( + compute.DeleteNodeGroupRequest(), project="project_value", zone="zone_value", node_group="node_group_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2164,52 +2140,93 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyNodeGroupRequest, + compute.DeleteNodesNodeGroupRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_nodes_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_delete_nodes_request_resource"] = { + "nodes": ["nodes_value_1", "nodes_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete_nodes(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyNodeGroupRequest, +def test_delete_nodes_rest_required_fields( + request_type=compute.DeleteNodesNodeGroupRequest, ): transport_class = transports.NodeGroupsRestTransport request_init = {} + request_init["node_group"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2222,27 +2239,27 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete_nodes._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete_nodes._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -2253,7 +2270,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2264,36 +2281,38 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete_nodes(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_nodes_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.delete_nodes._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "nodeGroup", + "nodeGroupsDeleteNodesRequestResource", "project", - "resource", "zone", ) ) @@ -2301,7 +2320,7 @@ def test_get_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_nodes_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2314,9 +2333,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_get_iam_policy" + transports.NodeGroupsRestInterceptor, "post_delete_nodes" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_get_iam_policy" + transports.NodeGroupsRestInterceptor, "pre_delete_nodes" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2331,17 +2350,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyNodeGroupRequest() + request = compute.DeleteNodesNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete_nodes( request, metadata=[ ("key", "val"), @@ -2353,8 +2372,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyNodeGroupRequest +def test_delete_nodes_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNodesNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2362,7 +2381,10 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_delete_nodes_request_resource"] = { + "nodes": ["nodes_value_1", "nodes_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2374,10 +2396,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete_nodes(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_nodes_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2386,45 +2408,48 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "node_group": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", + node_group="node_group_value", + node_groups_delete_nodes_request_resource=compute.NodeGroupsDeleteNodesRequest( + nodes=["nodes_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete_nodes(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/deleteNodes" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_nodes_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2433,15 +2458,18 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyNodeGroupRequest(), + client.delete_nodes( + compute.DeleteNodesNodeGroupRequest(), project="project_value", zone="zone_value", - resource="resource_value", + node_group="node_group_value", + node_groups_delete_nodes_request_resource=compute.NodeGroupsDeleteNodesRequest( + nodes=["nodes_value"] + ), ) -def test_get_iam_policy_rest_error(): +def test_delete_nodes_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2450,41 +2478,20 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertNodeGroupRequest, + compute.DeleteNodesNodeGroupRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_nodes_unary_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["node_group_resource"] = { - "autoscaling_policy": { - "max_nodes": 958, - "min_nodes": 956, - "mode": "mode_value", - }, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "location_hint": "location_hint_value", - "maintenance_policy": "maintenance_policy_value", - "maintenance_window": { - "maintenance_duration": {"nanos": 543, "seconds": 751}, - "start_time": "start_time_value", - }, - "name": "name_value", - "node_template": "node_template_value", - "self_link": "self_link_value", - "size": 443, - "status": "status_value", - "zone": "zone_value", + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_delete_nodes_request_resource"] = { + "nodes": ["nodes_value_1", "nodes_value_2"] } request = request_type(request_init) @@ -2522,39 +2529,19 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_nodes_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields(request_type=compute.InsertNodeGroupRequest): +def test_delete_nodes_unary_rest_required_fields( + request_type=compute.DeleteNodesNodeGroupRequest, +): transport_class = transports.NodeGroupsRestTransport request_init = {} - request_init["initial_node_count"] = 0 + request_init["node_group"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -2565,36 +2552,28 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertNodeGroupR ) # verify fields with default values are dropped - assert "initialNodeCount" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete_nodes._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "initialNodeCount" in jsonified_request - assert jsonified_request["initialNodeCount"] == request_init["initial_node_count"] - jsonified_request["initialNodeCount"] = 1911 + jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete_nodes._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "initial_node_count", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "initialNodeCount" in jsonified_request - assert jsonified_request["initialNodeCount"] == 1911 + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -2630,35 +2609,25 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertNodeGroupR response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_nodes_unary(request) - expected_params = [ - ( - "initialNodeCount", - 0, - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_nodes_unary_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete_nodes._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "initialNodeCount", - "requestId", - ) - ) + set(("requestId",)) & set( ( - "initialNodeCount", - "nodeGroupResource", + "nodeGroup", + "nodeGroupsDeleteNodesRequestResource", "project", "zone", ) @@ -2667,7 +2636,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_nodes_unary_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2680,9 +2649,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_insert" + transports.NodeGroupsRestInterceptor, "post_delete_nodes" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_insert" + transports.NodeGroupsRestInterceptor, "pre_delete_nodes" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2699,7 +2668,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertNodeGroupRequest() + request = compute.DeleteNodesNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2707,7 +2676,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_nodes_unary( request, metadata=[ ("key", "val"), @@ -2719,8 +2688,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertNodeGroupRequest +def test_delete_nodes_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNodesNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2728,30 +2697,9 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["node_group_resource"] = { - "autoscaling_policy": { - "max_nodes": 958, - "min_nodes": 956, - "mode": "mode_value", - }, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "location_hint": "location_hint_value", - "maintenance_policy": "maintenance_policy_value", - "maintenance_window": { - "maintenance_duration": {"nanos": 543, "seconds": 751}, - "start_time": "start_time_value", - }, - "name": "name_value", - "node_template": "node_template_value", - "self_link": "self_link_value", - "size": 443, - "status": "status_value", - "zone": "zone_value", + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_delete_nodes_request_resource"] = { + "nodes": ["nodes_value_1", "nodes_value_2"] } request = request_type(request_init) @@ -2764,10 +2712,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_nodes_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_nodes_unary_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2779,15 +2727,19 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - initial_node_count=1911, - node_group_resource=compute.NodeGroup( - autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + node_group="node_group_value", + node_groups_delete_nodes_request_resource=compute.NodeGroupsDeleteNodesRequest( + nodes=["nodes_value"] ), ) mock_args.update(sample_request) @@ -2800,20 +2752,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_nodes_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/deleteNodes" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_nodes_unary_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2822,18 +2774,18 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertNodeGroupRequest(), + client.delete_nodes_unary( + compute.DeleteNodesNodeGroupRequest(), project="project_value", zone="zone_value", - initial_node_count=1911, - node_group_resource=compute.NodeGroup( - autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + node_group="node_group_value", + node_groups_delete_nodes_request_resource=compute.NodeGroupsDeleteNodesRequest( + nodes=["nodes_value"] ), ) -def test_insert_unary_rest_error(): +def test_delete_nodes_unary_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2842,50 +2794,69 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListNodeGroupsRequest, + compute.GetNodeGroupRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupList( - id="id_value", + return_value = compute.NodeGroup( + creation_timestamp="creation_timestamp_value", + description="description_value", + fingerprint="fingerprint_value", + id=205, kind="kind_value", - next_page_token="next_page_token_value", + location_hint="location_hint_value", + maintenance_policy="maintenance_policy_value", + name="name_value", + node_template="node_template_value", self_link="self_link_value", + size=443, + status="status_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupList.to_json(return_value) + json_return_value = compute.NodeGroup.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.NodeGroup) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.fingerprint == "fingerprint_value" + assert response.id == 205 assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.location_hint == "location_hint_value" + assert response.maintenance_policy == "maintenance_policy_value" + assert response.name == "name_value" + assert response.node_template == "node_template_value" assert response.self_link == "self_link_value" + assert response.size == 443 + assert response.status == "status_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListNodeGroupsRequest): +def test_get_rest_required_fields(request_type=compute.GetNodeGroupRequest): transport_class = transports.NodeGroupsRestTransport request_init = {} + request_init["node_group"] = "" request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -2899,30 +2870,23 @@ def test_list_rest_required_fields(request_type=compute.ListNodeGroupsRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -2935,7 +2899,7 @@ def test_list_rest_required_fields(request_type=compute.ListNodeGroupsRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupList() + return_value = compute.NodeGroup() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2953,35 +2917,28 @@ def test_list_rest_required_fields(request_type=compute.ListNodeGroupsRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupList.to_json(return_value) + json_return_value = compute.NodeGroup.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( + "nodeGroup", "project", "zone", ) @@ -2990,7 +2947,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3003,9 +2960,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_list" + transports.NodeGroupsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_list" + transports.NodeGroupsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3020,19 +2977,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NodeGroupList.to_json( - compute.NodeGroupList() - ) + req.return_value._content = compute.NodeGroup.to_json(compute.NodeGroup()) - request = compute.ListNodeGroupsRequest() + request = compute.GetNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroupList + post.return_value = compute.NodeGroup - client.list( + client.get( request, metadata=[ ("key", "val"), @@ -3044,8 +2999,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListNodeGroupsRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3053,7 +3008,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3065,10 +3020,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get(request) -def test_list_rest_flattened(): +def test_get_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3077,40 +3032,45 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupList() + return_value = compute.NodeGroup() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", + node_group="node_group_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupList.to_json(return_value) + json_return_value = compute.NodeGroup.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3119,125 +3079,69 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListNodeGroupsRequest(), + client.get( + compute.GetNodeGroupRequest(), project="project_value", zone="zone_value", + node_group="node_group_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_rest_error(): client = NodeGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.NodeGroupList( - items=[ - compute.NodeGroup(), - compute.NodeGroup(), - compute.NodeGroup(), - ], - next_page_token="abc", - ), - compute.NodeGroupList( - items=[], - next_page_token="def", - ), - compute.NodeGroupList( - items=[ - compute.NodeGroup(), - ], - next_page_token="ghi", - ), - compute.NodeGroupList( - items=[ - compute.NodeGroup(), - compute.NodeGroup(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.NodeGroupList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.NodeGroup) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListNodesNodeGroupsRequest, + compute.GetIamPolicyNodeGroupRequest, dict, ], ) -def test_list_nodes_rest(request_type): +def test_get_iam_policy_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupsListNodes( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupsListNodes.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_nodes(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNodesPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_list_nodes_rest_required_fields( - request_type=compute.ListNodesNodeGroupsRequest, +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyNodeGroupRequest, ): transport_class = transports.NodeGroupsRestTransport request_init = {} - request_init["node_group"] = "" request_init["project"] = "" + request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -3250,35 +3154,27 @@ def test_list_nodes_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_nodes._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_nodes._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "nodeGroup" in jsonified_request - assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -3289,7 +3185,7 @@ def test_list_nodes_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupsListNodes() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3300,44 +3196,36 @@ def test_list_nodes_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupsListNodes.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_nodes(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_nodes_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_nodes._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("optionsRequestedPolicyVersion",)) & set( ( - "nodeGroup", "project", + "resource", "zone", ) ) @@ -3345,7 +3233,7 @@ def test_list_nodes_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_nodes_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3358,9 +3246,9 @@ def test_list_nodes_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_list_nodes" + transports.NodeGroupsRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_list_nodes" + transports.NodeGroupsRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3375,19 +3263,17 @@ def test_list_nodes_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NodeGroupsListNodes.to_json( - compute.NodeGroupsListNodes() - ) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.ListNodesNodeGroupsRequest() + request = compute.GetIamPolicyNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroupsListNodes + post.return_value = compute.Policy - client.list_nodes( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -3399,8 +3285,8 @@ def test_list_nodes_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_nodes_rest_bad_request( - transport: str = "rest", request_type=compute.ListNodesNodeGroupsRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3408,7 +3294,7 @@ def test_list_nodes_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3420,10 +3306,10 @@ def test_list_nodes_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_nodes(request) + client.get_iam_policy(request) -def test_list_nodes_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3432,45 +3318,45 @@ def test_list_nodes_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeGroupsListNodes() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "node_group": "sample3", + "resource": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - node_group="node_group_value", + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeGroupsListNodes.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_nodes(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/listNodes" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_list_nodes_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3479,94 +3365,35 @@ def test_list_nodes_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_nodes( - compute.ListNodesNodeGroupsRequest(), + client.get_iam_policy( + compute.GetIamPolicyNodeGroupRequest(), project="project_value", zone="zone_value", - node_group="node_group_value", + resource="resource_value", ) -def test_list_nodes_rest_pager(transport: str = "rest"): +def test_get_iam_policy_rest_error(): client = NodeGroupsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.NodeGroupsListNodes( - items=[ - compute.NodeGroupNode(), - compute.NodeGroupNode(), - compute.NodeGroupNode(), - ], - next_page_token="abc", - ), - compute.NodeGroupsListNodes( - items=[], - next_page_token="def", - ), - compute.NodeGroupsListNodes( - items=[ - compute.NodeGroupNode(), - ], - next_page_token="ghi", - ), - compute.NodeGroupsListNodes( - items=[ - compute.NodeGroupNode(), - compute.NodeGroupNode(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.NodeGroupsListNodes.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "zone": "sample2", - "node_group": "sample3", - } - - pager = client.list_nodes(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.NodeGroupNode) for i in results) - - pages = list(client.list_nodes(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchNodeGroupRequest, + compute.InsertNodeGroupRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_insert_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init = {"project": "sample1", "zone": "sample2"} request_init["node_group_resource"] = { "autoscaling_policy": { "max_nodes": 958, @@ -3627,10 +3454,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3655,11 +3482,11 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchNodeGroupRequest): +def test_insert_rest_required_fields(request_type=compute.InsertNodeGroupRequest): transport_class = transports.NodeGroupsRestTransport request_init = {} - request_init["node_group"] = "" + request_init["initial_node_count"] = 0 request_init["project"] = "" request_init["zone"] = "" request = request_type(request_init) @@ -3670,28 +3497,36 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNodeGroupReq ) # verify fields with default values are dropped + assert "initialNodeCount" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "initialNodeCount" in jsonified_request + assert jsonified_request["initialNodeCount"] == request_init["initial_node_count"] - jsonified_request["nodeGroup"] = "node_group_value" + jsonified_request["initialNodeCount"] = 1911 jsonified_request["project"] = "project_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "initial_node_count", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "nodeGroup" in jsonified_request - assert jsonified_request["nodeGroup"] == "node_group_value" + assert "initialNodeCount" in jsonified_request + assert jsonified_request["initialNodeCount"] == 1911 assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "zone" in jsonified_request @@ -3715,7 +3550,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNodeGroupReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -3727,24 +3562,34 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchNodeGroupReq response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert(request) - expected_params = [] + expected_params = [ + ( + "initialNodeCount", + 0, + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "initialNodeCount", + "requestId", + ) + ) & set( ( - "nodeGroup", + "initialNodeCount", "nodeGroupResource", "project", "zone", @@ -3754,7 +3599,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3767,9 +3612,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_patch" + transports.NodeGroupsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_patch" + transports.NodeGroupsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3786,7 +3631,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchNodeGroupRequest() + request = compute.InsertNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3794,7 +3639,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.insert( request, metadata=[ ("key", "val"), @@ -3806,8 +3651,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchNodeGroupRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3815,7 +3660,7 @@ def test_patch_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init = {"project": "sample1", "zone": "sample2"} request_init["node_group_resource"] = { "autoscaling_policy": { "max_nodes": 958, @@ -3851,10 +3696,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.insert(request) -def test_patch_unary_rest_flattened(): +def test_insert_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3866,17 +3711,13 @@ def test_patch_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "node_group": "sample3", - } + sample_request = {"project": "sample1", "zone": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - node_group="node_group_value", + initial_node_count=1911, node_group_resource=compute.NodeGroup( autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) ), @@ -3891,20 +3732,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3913,18 +3754,18 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchNodeGroupRequest(), + client.insert( + compute.InsertNodeGroupRequest(), project="project_value", zone="zone_value", - node_group="node_group_value", + initial_node_count=1911, node_group_resource=compute.NodeGroup( autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) ), ) -def test_patch_unary_rest_error(): +def test_insert_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3933,129 +3774,2356 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicyNodeGroupRequest, + compute.InsertNodeGroupRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_insert_unary_rest(request_type): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, + request_init = {"project": "sample1", "zone": "sample2"} + request_init["node_group_resource"] = { + "autoscaling_policy": { + "max_nodes": 958, + "min_nodes": 956, + "mode": "mode_value", + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "location_hint": "location_hint_value", + "maintenance_policy": "maintenance_policy_value", + "maintenance_window": { + "maintenance_duration": {"nanos": 543, "seconds": 751}, + "start_time": "start_time_value", }, + "name": "name_value", + "node_template": "node_template_value", + "self_link": "self_link_value", + "size": 443, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertNodeGroupRequest): + transport_class = transports.NodeGroupsRestTransport + + request_init = {} + request_init["initial_node_count"] = 0 + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "initialNodeCount" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "initialNodeCount" in jsonified_request + assert jsonified_request["initialNodeCount"] == request_init["initial_node_count"] + + jsonified_request["initialNodeCount"] = 1911 + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "initial_node_count", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "initialNodeCount" in jsonified_request + assert jsonified_request["initialNodeCount"] == 1911 + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [ + ( + "initialNodeCount", + 0, + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "initialNodeCount", + "requestId", + ) + ) + & set( + ( + "initialNodeCount", + "nodeGroupResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeGroupsRestInterceptor(), + ) + client = NodeGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeGroupsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.NodeGroupsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertNodeGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNodeGroupRequest +): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["node_group_resource"] = { + "autoscaling_policy": { + "max_nodes": 958, + "min_nodes": 956, + "mode": "mode_value", + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "location_hint": "location_hint_value", + "maintenance_policy": "maintenance_policy_value", + "maintenance_window": { + "maintenance_duration": {"nanos": 543, "seconds": 751}, + "start_time": "start_time_value", + }, + "name": "name_value", + "node_template": "node_template_value", + "self_link": "self_link_value", + "size": 443, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + initial_node_count=1911, + node_group_resource=compute.NodeGroup( + autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertNodeGroupRequest(), + project="project_value", + zone="zone_value", + initial_node_count=1911, + node_group_resource=compute.NodeGroup( + autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + ), + ) + + +def test_insert_unary_rest_error(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListNodeGroupsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NodeGroupList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeGroupList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListNodeGroupsRequest): + transport_class = transports.NodeGroupsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NodeGroupList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeGroupList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeGroupsRestInterceptor(), + ) + client = NodeGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeGroupsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.NodeGroupsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NodeGroupList.to_json( + compute.NodeGroupList() + ) + + request = compute.ListNodeGroupsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NodeGroupList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListNodeGroupsRequest +): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NodeGroupList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeGroupList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListNodeGroupsRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.NodeGroupList( + items=[ + compute.NodeGroup(), + compute.NodeGroup(), + compute.NodeGroup(), + ], + next_page_token="abc", + ), + compute.NodeGroupList( + items=[], + next_page_token="def", + ), + compute.NodeGroupList( + items=[ + compute.NodeGroup(), + ], + next_page_token="ghi", + ), + compute.NodeGroupList( + items=[ + compute.NodeGroup(), + compute.NodeGroup(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.NodeGroupList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.NodeGroup) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListNodesNodeGroupsRequest, + dict, + ], +) +def test_list_nodes_rest(request_type): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NodeGroupsListNodes( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeGroupsListNodes.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_nodes(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNodesPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_nodes_rest_required_fields( + request_type=compute.ListNodesNodeGroupsRequest, +): + transport_class = transports.NodeGroupsRestTransport + + request_init = {} + request_init["node_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_nodes._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["nodeGroup"] = "node_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_nodes._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NodeGroupsListNodes() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeGroupsListNodes.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_nodes(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_nodes_rest_unset_required_fields(): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_nodes._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "nodeGroup", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_nodes_rest_interceptors(null_interceptor): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeGroupsRestInterceptor(), + ) + client = NodeGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeGroupsRestInterceptor, "post_list_nodes" + ) as post, mock.patch.object( + transports.NodeGroupsRestInterceptor, "pre_list_nodes" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NodeGroupsListNodes.to_json( + compute.NodeGroupsListNodes() + ) + + request = compute.ListNodesNodeGroupsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NodeGroupsListNodes + + client.list_nodes( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_nodes_rest_bad_request( + transport: str = "rest", request_type=compute.ListNodesNodeGroupsRequest +): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_nodes(request) + + +def test_list_nodes_rest_flattened(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NodeGroupsListNodes() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + node_group="node_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeGroupsListNodes.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_nodes(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/listNodes" + % client.transport._host, + args[1], + ) + + +def test_list_nodes_rest_flattened_error(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_nodes( + compute.ListNodesNodeGroupsRequest(), + project="project_value", + zone="zone_value", + node_group="node_group_value", + ) + + +def test_list_nodes_rest_pager(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.NodeGroupsListNodes( + items=[ + compute.NodeGroupNode(), + compute.NodeGroupNode(), + compute.NodeGroupNode(), + ], + next_page_token="abc", + ), + compute.NodeGroupsListNodes( + items=[], + next_page_token="def", + ), + compute.NodeGroupsListNodes( + items=[ + compute.NodeGroupNode(), + ], + next_page_token="ghi", + ), + compute.NodeGroupsListNodes( + items=[ + compute.NodeGroupNode(), + compute.NodeGroupNode(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.NodeGroupsListNodes.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } + + pager = client.list_nodes(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.NodeGroupNode) for i in results) + + pages = list(client.list_nodes(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchNodeGroupRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_group_resource"] = { + "autoscaling_policy": { + "max_nodes": 958, + "min_nodes": 956, + "mode": "mode_value", + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "location_hint": "location_hint_value", + "maintenance_policy": "maintenance_policy_value", + "maintenance_window": { + "maintenance_duration": {"nanos": 543, "seconds": 751}, + "start_time": "start_time_value", + }, + "name": "name_value", + "node_template": "node_template_value", + "self_link": "self_link_value", + "size": 443, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchNodeGroupRequest): + transport_class = transports.NodeGroupsRestTransport + + request_init = {} + request_init["node_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["nodeGroup"] = "node_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "nodeGroup", + "nodeGroupResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeGroupsRestInterceptor(), + ) + client = NodeGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeGroupsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.NodeGroupsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchNodeGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNodeGroupRequest +): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_group_resource"] = { + "autoscaling_policy": { + "max_nodes": 958, + "min_nodes": 956, + "mode": "mode_value", + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "location_hint": "location_hint_value", + "maintenance_policy": "maintenance_policy_value", + "maintenance_window": { + "maintenance_duration": {"nanos": 543, "seconds": 751}, + "start_time": "start_time_value", + }, + "name": "name_value", + "node_template": "node_template_value", + "self_link": "self_link_value", + "size": 443, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + node_group="node_group_value", + node_group_resource=compute.NodeGroup( + autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchNodeGroupRequest(), + project="project_value", + zone="zone_value", + node_group="node_group_value", + node_group_resource=compute.NodeGroup( + autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + ), + ) + + +def test_patch_rest_error(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchNodeGroupRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_group_resource"] = { + "autoscaling_policy": { + "max_nodes": 958, + "min_nodes": 956, + "mode": "mode_value", + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "location_hint": "location_hint_value", + "maintenance_policy": "maintenance_policy_value", + "maintenance_window": { + "maintenance_duration": {"nanos": 543, "seconds": 751}, + "start_time": "start_time_value", + }, + "name": "name_value", + "node_template": "node_template_value", + "self_link": "self_link_value", + "size": 443, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields(request_type=compute.PatchNodeGroupRequest): + transport_class = transports.NodeGroupsRestTransport + + request_init = {} + request_init["node_group"] = "" + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["nodeGroup"] = "node_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "nodeGroup", + "nodeGroupResource", + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeGroupsRestInterceptor(), + ) + client = NodeGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeGroupsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.NodeGroupsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchNodeGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchNodeGroupRequest +): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_group_resource"] = { + "autoscaling_policy": { + "max_nodes": 958, + "min_nodes": 956, + "mode": "mode_value", + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "location_hint": "location_hint_value", + "maintenance_policy": "maintenance_policy_value", + "maintenance_window": { + "maintenance_duration": {"nanos": 543, "seconds": 751}, + "start_time": "start_time_value", + }, + "name": "name_value", + "node_template": "node_template_value", + "self_link": "self_link_value", + "size": 443, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "node_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + node_group="node_group_value", + node_group_resource=compute.NodeGroup( + autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchNodeGroupRequest(), + project="project_value", + zone="zone_value", + node_group="node_group_value", + node_group_resource=compute.NodeGroup( + autoscaling_policy=compute.NodeGroupAutoscalingPolicy(max_nodes=958) + ), + ) + + +def test_patch_unary_rest_error(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyNodeGroupRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicyNodeGroupRequest, +): + transport_class = transports.NodeGroupsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "resource", + "zone", + "zoneSetPolicyRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.NodeGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeGroupsRestInterceptor(), + ) + client = NodeGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeGroupsRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.NodeGroupsRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.SetIamPolicyNodeGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicyNodeGroupRequest +): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicyNodeGroupRequest(), + project="project_value", + zone="zone_value", + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetNodeTemplateNodeGroupRequest, + dict, + ], +) +def test_set_node_template_rest(request_type): + client = NodeGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_set_node_template_request_resource"] = { + "node_template": "node_template_value" } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_node_template(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicyNodeGroupRequest, +def test_set_node_template_rest_required_fields( + request_type=compute.SetNodeTemplateNodeGroupRequest, ): transport_class = transports.NodeGroupsRestTransport request_init = {} + request_init["node_group"] = "" request_init["project"] = "" - request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -4068,25 +6136,27 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_node_template._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["nodeGroup"] = "node_group_value" jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_node_template._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "nodeGroup" in jsonified_request + assert jsonified_request["nodeGroup"] == "node_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -4097,7 +6167,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4116,38 +6186,38 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_node_template(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_set_node_template_rest_unset_required_fields(): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.set_node_template._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( + "nodeGroup", + "nodeGroupsSetNodeTemplateRequestResource", "project", - "resource", "zone", - "zoneSetPolicyRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_set_node_template_rest_interceptors(null_interceptor): transport = transports.NodeGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4160,9 +6230,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeGroupsRestInterceptor, "post_set_iam_policy" + transports.NodeGroupsRestInterceptor, "post_set_node_template" ) as post, mock.patch.object( - transports.NodeGroupsRestInterceptor, "pre_set_iam_policy" + transports.NodeGroupsRestInterceptor, "pre_set_node_template" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4177,17 +6247,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicyNodeGroupRequest() + request = compute.SetNodeTemplateNodeGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.set_node_template( request, metadata=[ ("key", "val"), @@ -4199,8 +6269,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicyNodeGroupRequest +def test_set_node_template_rest_bad_request( + transport: str = "rest", request_type=compute.SetNodeTemplateNodeGroupRequest ): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4208,83 +6278,9 @@ def test_set_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init = {"project": "sample1", "zone": "sample2", "node_group": "sample3"} + request_init["node_groups_set_node_template_request_resource"] = { + "node_template": "node_template_value" } request = request_type(request_init) @@ -4297,10 +6293,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.set_node_template(request) -def test_set_iam_policy_rest_flattened(): +def test_set_node_template_rest_flattened(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4309,22 +6305,22 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "node_group": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + node_group="node_group_value", + node_groups_set_node_template_request_resource=compute.NodeGroupsSetNodeTemplateRequest( + node_template="node_template_value" ), ) mock_args.update(sample_request) @@ -4332,25 +6328,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.set_node_template(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/nodeGroups/{node_group}/setNodeTemplate" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_set_node_template_rest_flattened_error(transport: str = "rest"): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4359,18 +6355,18 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicyNodeGroupRequest(), + client.set_node_template( + compute.SetNodeTemplateNodeGroupRequest(), project="project_value", zone="zone_value", - resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + node_group="node_group_value", + node_groups_set_node_template_request_resource=compute.NodeGroupsSetNodeTemplateRequest( + node_template="node_template_value" ), ) -def test_set_iam_policy_rest_error(): +def test_set_node_template_rest_error(): client = NodeGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4434,28 +6430,6 @@ def test_set_node_template_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_node_template_unary_rest_required_fields( @@ -5085,6 +7059,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NodeGroupsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_node_groups_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -5128,6 +7115,14 @@ def test_node_groups_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_node_groups_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_node_templates.py b/tests/unit/gapic/compute_v1/test_node_templates.py index f0531d7d9..901f96887 100644 --- a/tests/unit/gapic/compute_v1/test_node_templates.py +++ b/tests/unit/gapic/compute_v1/test_node_templates.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -882,7 +884,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -930,10 +932,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -958,9 +960,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteNodeTemplateRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteNodeTemplateRequest): transport_class = transports.NodeTemplatesRestTransport request_init = {} @@ -1031,14 +1031,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.NodeTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1057,7 +1057,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.NodeTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1097,7 +1097,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1109,7 +1109,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteNodeTemplateRequest ): client = NodeTemplatesClient( @@ -1134,10 +1134,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1171,7 +1171,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1184,7 +1184,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1193,7 +1193,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteNodeTemplateRequest(), project="project_value", region="region_value", @@ -1201,7 +1201,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1210,11 +1210,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNodeTemplateRequest, + compute.DeleteNodeTemplateRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1231,44 +1231,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeTemplate( - cpu_overcommit_type="cpu_overcommit_type_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - node_type="node_type_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeTemplate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NodeTemplate) - assert response.cpu_overcommit_type == "cpu_overcommit_type_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.node_type == "node_type_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.status == "status_value" - assert response.status_message == "status_message_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetNodeTemplateRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteNodeTemplateRequest, +): transport_class = transports.NodeTemplatesRestTransport request_init = {} @@ -1286,7 +1288,7 @@ def test_get_rest_required_fields(request_type=compute.GetNodeTemplateRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1297,7 +1299,9 @@ def test_get_rest_required_fields(request_type=compute.GetNodeTemplateRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1315,7 +1319,7 @@ def test_get_rest_required_fields(request_type=compute.GetNodeTemplateRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NodeTemplate() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1326,32 +1330,32 @@ def test_get_rest_required_fields(request_type=compute.GetNodeTemplateRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeTemplate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.NodeTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "nodeTemplate", @@ -1363,7 +1367,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.NodeTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1376,9 +1380,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeTemplatesRestInterceptor, "post_get" + transports.NodeTemplatesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.NodeTemplatesRestInterceptor, "pre_get" + transports.NodeTemplatesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1393,17 +1397,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NodeTemplate.to_json(compute.NodeTemplate()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetNodeTemplateRequest() + request = compute.DeleteNodeTemplateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeTemplate + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1415,8 +1419,604 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetNodeTemplateRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteNodeTemplateRequest +): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "node_template": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "node_template": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + node_template="node_template_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/nodeTemplates/{node_template}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteNodeTemplateRequest(), + project="project_value", + region="region_value", + node_template="node_template_value", + ) + + +def test_delete_unary_rest_error(): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetNodeTemplateRequest, + dict, + ], +) +def test_get_rest(request_type): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "node_template": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NodeTemplate( + cpu_overcommit_type="cpu_overcommit_type_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + name="name_value", + node_type="node_type_value", + region="region_value", + self_link="self_link_value", + status="status_value", + status_message="status_message_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeTemplate.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NodeTemplate) + assert response.cpu_overcommit_type == "cpu_overcommit_type_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.node_type == "node_type_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.status == "status_value" + assert response.status_message == "status_message_value" + + +def test_get_rest_required_fields(request_type=compute.GetNodeTemplateRequest): + transport_class = transports.NodeTemplatesRestTransport + + request_init = {} + request_init["node_template"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["nodeTemplate"] = "node_template_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "nodeTemplate" in jsonified_request + assert jsonified_request["nodeTemplate"] == "node_template_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NodeTemplate() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeTemplate.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.NodeTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "nodeTemplate", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.NodeTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeTemplatesRestInterceptor(), + ) + client = NodeTemplatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeTemplatesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.NodeTemplatesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NodeTemplate.to_json(compute.NodeTemplate()) + + request = compute.GetNodeTemplateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.NodeTemplate + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetNodeTemplateRequest +): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "node_template": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NodeTemplate() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "node_template": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + node_template="node_template_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NodeTemplate.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/nodeTemplates/{node_template}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetNodeTemplateRequest(), + project="project_value", + region="region_value", + node_template="node_template_value", + ) + + +def test_get_rest_error(): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyNodeTemplateRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyNodeTemplateRequest, +): + transport_class = transports.NodeTemplatesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = NodeTemplatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.NodeTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "region", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.NodeTemplatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NodeTemplatesRestInterceptor(), + ) + client = NodeTemplatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.NodeTemplatesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.NodeTemplatesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyNodeTemplateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyNodeTemplateRequest ): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1424,11 +2024,7 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "node_template": "sample3", - } + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1440,10 +2036,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.get_iam_policy(request) -def test_get_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1452,45 +2048,45 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NodeTemplate() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "region": "sample2", - "node_template": "sample3", + "resource": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - node_template="node_template_value", + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NodeTemplate.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/nodeTemplates/{node_template}" + "%s/compute/v1/projects/{project}/regions/{region}/nodeTemplates/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1499,15 +2095,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetNodeTemplateRequest(), + client.get_iam_policy( + compute.GetIamPolicyNodeTemplateRequest(), project="project_value", region="region_value", - node_template="node_template_value", + resource="resource_value", ) -def test_get_rest_error(): +def test_get_iam_policy_rest_error(): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1516,53 +2112,114 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyNodeTemplateRequest, + compute.InsertNodeTemplateRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_insert_rest(request_type): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["node_template_resource"] = { + "accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "cpu_overcommit_type": "cpu_overcommit_type_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disks": [ + {"disk_count": 1075, "disk_size_gb": 1261, "disk_type": "disk_type_value"} + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "node_affinity_labels": {}, + "node_type": "node_type_value", + "node_type_flexibility": { + "cpus": "cpus_value", + "local_ssd": "local_ssd_value", + "memory": "memory_value", + }, + "region": "region_value", + "self_link": "self_link_value", + "server_binding": {"type_": "type__value"}, + "status": "status_value", + "status_message": "status_message_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyNodeTemplateRequest, -): +def test_insert_rest_required_fields(request_type=compute.InsertNodeTemplateRequest): transport_class = transports.NodeTemplatesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1574,20 +2231,19 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1595,8 +2251,6 @@ def test_get_iam_policy_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1605,7 +2259,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1616,44 +2270,45 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.NodeTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "nodeTemplateResource", "project", "region", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.NodeTemplatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1666,9 +2321,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.NodeTemplatesRestInterceptor, "post_get_iam_policy" + transports.NodeTemplatesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.NodeTemplatesRestInterceptor, "pre_get_iam_policy" + transports.NodeTemplatesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1683,17 +2338,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyNodeTemplateRequest() + request = compute.InsertNodeTemplateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.insert( request, metadata=[ ("key", "val"), @@ -1705,8 +2360,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyNodeTemplateRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertNodeTemplateRequest ): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1714,7 +2369,33 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["node_template_resource"] = { + "accelerators": [ + {"accelerator_count": 1805, "accelerator_type": "accelerator_type_value"} + ], + "cpu_overcommit_type": "cpu_overcommit_type_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disks": [ + {"disk_count": 1075, "disk_size_gb": 1261, "disk_type": "disk_type_value"} + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "node_affinity_labels": {}, + "node_type": "node_type_value", + "node_type_flexibility": { + "cpus": "cpus_value", + "local_ssd": "local_ssd_value", + "memory": "memory_value", + }, + "region": "region_value", + "self_link": "self_link_value", + "server_binding": {"type_": "type__value"}, + "status": "status_value", + "status_message": "status_message_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1726,10 +2407,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.insert(request) -def test_get_iam_policy_rest_flattened(): +def test_insert_rest_flattened(): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1738,45 +2419,43 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "resource": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", + node_template_resource=compute.NodeTemplate( + accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/nodeTemplates/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/nodeTemplates" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1785,15 +2464,17 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyNodeTemplateRequest(), + client.insert( + compute.InsertNodeTemplateRequest(), project="project_value", region="region_value", - resource="resource_value", + node_template_resource=compute.NodeTemplate( + accelerators=[compute.AcceleratorConfig(accelerator_count=1805)] + ), ) -def test_get_iam_policy_rest_error(): +def test_insert_rest_error(): client = NodeTemplatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1880,28 +2561,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -3337,6 +3996,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NodeTemplatesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_node_templates_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3375,6 +4047,14 @@ def test_node_templates_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_node_templates_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_node_types.py b/tests/unit/gapic/compute_v1/test_node_types.py index 0b71b2fe5..0b0ef4d60 100644 --- a/tests/unit/gapic/compute_v1/test_node_types.py +++ b/tests/unit/gapic/compute_v1/test_node_types.py @@ -1572,6 +1572,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = NodeTypesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_node_types_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1605,6 +1618,14 @@ def test_node_types_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_node_types_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_packet_mirrorings.py b/tests/unit/gapic/compute_v1/test_packet_mirrorings.py index 80151400a..53262d158 100644 --- a/tests/unit/gapic/compute_v1/test_packet_mirrorings.py +++ b/tests/unit/gapic/compute_v1/test_packet_mirrorings.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -904,7 +906,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -952,10 +954,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -980,9 +982,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeletePacketMirroringRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeletePacketMirroringRequest): transport_class = transports.PacketMirroringsRestTransport request_init = {} @@ -1053,14 +1053,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1079,7 +1079,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1119,7 +1119,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1131,7 +1131,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeletePacketMirroringRequest ): client = PacketMirroringsClient( @@ -1156,10 +1156,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1193,7 +1193,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1206,7 +1206,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1215,7 +1215,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeletePacketMirroringRequest(), project="project_value", region="region_value", @@ -1223,7 +1223,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1232,11 +1232,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetPacketMirroringRequest, + compute.DeletePacketMirroringRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1253,40 +1253,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PacketMirroring( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - enable="enable_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - priority=898, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PacketMirroring.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.PacketMirroring) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.enable == "enable_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.priority == 898 - assert response.region == "region_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetPacketMirroringRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeletePacketMirroringRequest, +): transport_class = transports.PacketMirroringsRestTransport request_init = {} @@ -1304,7 +1310,7 @@ def test_get_rest_required_fields(request_type=compute.GetPacketMirroringRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1315,7 +1321,9 @@ def test_get_rest_required_fields(request_type=compute.GetPacketMirroringRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1333,7 +1341,7 @@ def test_get_rest_required_fields(request_type=compute.GetPacketMirroringRequest request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PacketMirroring() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1344,32 +1352,32 @@ def test_get_rest_required_fields(request_type=compute.GetPacketMirroringRequest # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PacketMirroring.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "packetMirroring", @@ -1381,7 +1389,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1394,9 +1402,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PacketMirroringsRestInterceptor, "post_get" + transports.PacketMirroringsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.PacketMirroringsRestInterceptor, "pre_get" + transports.PacketMirroringsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1411,19 +1419,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PacketMirroring.to_json( - compute.PacketMirroring() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetPacketMirroringRequest() + request = compute.DeletePacketMirroringRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PacketMirroring + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1435,8 +1441,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetPacketMirroringRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeletePacketMirroringRequest ): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1460,10 +1466,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1472,7 +1478,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PacketMirroring() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1492,12 +1498,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PacketMirroring.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1510,7 +1516,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1519,15 +1525,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetPacketMirroringRequest(), + client.delete_unary( + compute.DeletePacketMirroringRequest(), project="project_value", region="region_value", packet_mirroring="packet_mirroring_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1536,113 +1542,65 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertPacketMirroringRequest, + compute.GetPacketMirroringRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["packet_mirroring_resource"] = { - "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable": "enable_value", - "filter": { - "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], - "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], - "direction": "direction_value", - }, - "id": 205, - "kind": "kind_value", - "mirrored_resources": { - "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], - "subnetworks": [ - {"canonical_url": "canonical_url_value", "url": "url_value"} - ], - "tags": ["tags_value_1", "tags_value_2"], - }, - "name": "name_value", - "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, - "priority": 898, - "region": "region_value", - "self_link": "self_link_value", + request_init = { + "project": "sample1", + "region": "sample2", + "packet_mirroring": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.PacketMirroring( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + enable="enable_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + priority=898, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PacketMirroring.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.PacketMirroring) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.enable == "enable_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.priority == 898 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertPacketMirroringRequest, -): +def test_get_rest_required_fields(request_type=compute.GetPacketMirroringRequest): transport_class = transports.PacketMirroringsRestTransport request_init = {} + request_init["packet_mirroring"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1656,22 +1614,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["packetMirroring"] = "packet_mirroring_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "packetMirroring" in jsonified_request + assert jsonified_request["packetMirroring"] == "packet_mirroring_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1684,7 +1643,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PacketMirroring() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1695,36 +1654,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PacketMirroring.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "packetMirroringResource", + "packetMirroring", "project", "region", ) @@ -1733,7 +1691,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1746,9 +1704,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PacketMirroringsRestInterceptor, "post_insert" + transports.PacketMirroringsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.PacketMirroringsRestInterceptor, "pre_insert" + transports.PacketMirroringsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1763,17 +1721,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.PacketMirroring.to_json( + compute.PacketMirroring() + ) - request = compute.InsertPacketMirroringRequest() + request = compute.GetPacketMirroringRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.PacketMirroring - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1785,8 +1745,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertPacketMirroringRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetPacketMirroringRequest ): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1794,32 +1754,1036 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["packet_mirroring_resource"] = { - "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable": "enable_value", - "filter": { - "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], - "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], - "direction": "direction_value", - }, - "id": 205, - "kind": "kind_value", + request_init = { + "project": "sample1", + "region": "sample2", + "packet_mirroring": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PacketMirroring() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "packet_mirroring": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + packet_mirroring="packet_mirroring_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PacketMirroring.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/packetMirrorings/{packet_mirroring}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetPacketMirroringRequest(), + project="project_value", + region="region_value", + packet_mirroring="packet_mirroring_value", + ) + + +def test_get_rest_error(): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertPacketMirroringRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["packet_mirroring_resource"] = { + "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable": "enable_value", + "filter": { + "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], + "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], + "direction": "direction_value", + }, + "id": 205, + "kind": "kind_value", + "mirrored_resources": { + "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], + "subnetworks": [ + {"canonical_url": "canonical_url_value", "url": "url_value"} + ], + "tags": ["tags_value_1", "tags_value_2"], + }, + "name": "name_value", + "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "priority": 898, + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertPacketMirroringRequest): + transport_class = transports.PacketMirroringsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.PacketMirroringsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "packetMirroringResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.PacketMirroringsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PacketMirroringsRestInterceptor(), + ) + client = PacketMirroringsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PacketMirroringsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.PacketMirroringsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertPacketMirroringRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertPacketMirroringRequest +): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["packet_mirroring_resource"] = { + "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable": "enable_value", + "filter": { + "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], + "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], + "direction": "direction_value", + }, + "id": 205, + "kind": "kind_value", + "mirrored_resources": { + "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], + "subnetworks": [ + {"canonical_url": "canonical_url_value", "url": "url_value"} + ], + "tags": ["tags_value_1", "tags_value_2"], + }, + "name": "name_value", + "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "priority": 898, + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + packet_mirroring_resource=compute.PacketMirroring( + collector_ilb=compute.PacketMirroringForwardingRuleInfo( + canonical_url="canonical_url_value" + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/packetMirrorings" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertPacketMirroringRequest(), + project="project_value", + region="region_value", + packet_mirroring_resource=compute.PacketMirroring( + collector_ilb=compute.PacketMirroringForwardingRuleInfo( + canonical_url="canonical_url_value" + ) + ), + ) + + +def test_insert_rest_error(): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertPacketMirroringRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["packet_mirroring_resource"] = { + "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable": "enable_value", + "filter": { + "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], + "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], + "direction": "direction_value", + }, + "id": 205, + "kind": "kind_value", + "mirrored_resources": { + "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], + "subnetworks": [ + {"canonical_url": "canonical_url_value", "url": "url_value"} + ], + "tags": ["tags_value_1", "tags_value_2"], + }, + "name": "name_value", + "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "priority": 898, + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertPacketMirroringRequest, +): + transport_class = transports.PacketMirroringsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.PacketMirroringsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "packetMirroringResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.PacketMirroringsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PacketMirroringsRestInterceptor(), + ) + client = PacketMirroringsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PacketMirroringsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.PacketMirroringsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertPacketMirroringRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertPacketMirroringRequest +): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["packet_mirroring_resource"] = { + "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable": "enable_value", + "filter": { + "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], + "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], + "direction": "direction_value", + }, + "id": 205, + "kind": "kind_value", "mirrored_resources": { "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], "subnetworks": [ {"canonical_url": "canonical_url_value", "url": "url_value"} ], - "tags": ["tags_value_1", "tags_value_2"], - }, - "name": "name_value", - "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, - "priority": 898, - "region": "region_value", - "self_link": "self_link_value", - } + "tags": ["tags_value_1", "tags_value_2"], + }, + "name": "name_value", + "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "priority": 898, + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + packet_mirroring_resource=compute.PacketMirroring( + collector_ilb=compute.PacketMirroringForwardingRuleInfo( + canonical_url="canonical_url_value" + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/packetMirrorings" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertPacketMirroringRequest(), + project="project_value", + region="region_value", + packet_mirroring_resource=compute.PacketMirroring( + collector_ilb=compute.PacketMirroringForwardingRuleInfo( + canonical_url="canonical_url_value" + ) + ), + ) + + +def test_insert_unary_rest_error(): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPacketMirroringsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PacketMirroringList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PacketMirroringList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListPacketMirroringsRequest): + transport_class = transports.PacketMirroringsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.PacketMirroringList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PacketMirroringList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.PacketMirroringsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.PacketMirroringsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PacketMirroringsRestInterceptor(), + ) + client = PacketMirroringsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PacketMirroringsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.PacketMirroringsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.PacketMirroringList.to_json( + compute.PacketMirroringList() + ) + + request = compute.ListPacketMirroringsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.PacketMirroringList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListPacketMirroringsRequest +): + client = PacketMirroringsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1831,10 +2795,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.list(request) -def test_insert_unary_rest_flattened(): +def test_list_rest_flattened(): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1843,7 +2807,7 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PacketMirroringList() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -1852,23 +2816,18 @@ def test_insert_unary_rest_flattened(): mock_args = dict( project="project_value", region="region_value", - packet_mirroring_resource=compute.PacketMirroring( - collector_ilb=compute.PacketMirroringForwardingRuleInfo( - canonical_url="canonical_url_value" - ) - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PacketMirroringList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1881,7 +2840,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1890,71 +2849,187 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertPacketMirroringRequest(), + client.list( + compute.ListPacketMirroringsRequest(), project="project_value", region="region_value", - packet_mirroring_resource=compute.PacketMirroring( - collector_ilb=compute.PacketMirroringForwardingRuleInfo( - canonical_url="canonical_url_value" - ) - ), ) -def test_insert_unary_rest_error(): +def test_list_rest_pager(transport: str = "rest"): client = PacketMirroringsClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.PacketMirroringList( + items=[ + compute.PacketMirroring(), + compute.PacketMirroring(), + compute.PacketMirroring(), + ], + next_page_token="abc", + ), + compute.PacketMirroringList( + items=[], + next_page_token="def", + ), + compute.PacketMirroringList( + items=[ + compute.PacketMirroring(), + ], + next_page_token="ghi", + ), + compute.PacketMirroringList( + items=[ + compute.PacketMirroring(), + compute.PacketMirroring(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.PacketMirroringList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.PacketMirroring) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.ListPacketMirroringsRequest, + compute.PatchPacketMirroringRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_rest(request_type): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "packet_mirroring": "sample3", + } + request_init["packet_mirroring_resource"] = { + "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable": "enable_value", + "filter": { + "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], + "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], + "direction": "direction_value", + }, + "id": 205, + "kind": "kind_value", + "mirrored_resources": { + "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], + "subnetworks": [ + {"canonical_url": "canonical_url_value", "url": "url_value"} + ], + "tags": ["tags_value_1", "tags_value_2"], + }, + "name": "name_value", + "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "priority": 898, + "region": "region_value", + "self_link": "self_link_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PacketMirroringList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PacketMirroringList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListPacketMirroringsRequest): +def test_patch_rest_required_fields(request_type=compute.PatchPacketMirroringRequest): transport_class = transports.PacketMirroringsRestTransport request_init = {} + request_init["packet_mirroring"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1968,30 +3043,25 @@ def test_list_rest_required_fields(request_type=compute.ListPacketMirroringsRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["packetMirroring"] = "packet_mirroring_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "packetMirroring" in jsonified_request + assert jsonified_request["packetMirroring"] == "packet_mirroring_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -2004,7 +3074,7 @@ def test_list_rest_required_fields(request_type=compute.ListPacketMirroringsRequ request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PacketMirroringList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2015,42 +3085,37 @@ def test_list_rest_required_fields(request_type=compute.ListPacketMirroringsRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PacketMirroringList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "packetMirroring", + "packetMirroringResource", "project", "region", ) @@ -2059,7 +3124,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.PacketMirroringsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2072,9 +3137,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PacketMirroringsRestInterceptor, "post_list" + transports.PacketMirroringsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.PacketMirroringsRestInterceptor, "pre_list" + transports.PacketMirroringsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2089,19 +3154,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PacketMirroringList.to_json( - compute.PacketMirroringList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPacketMirroringsRequest() + request = compute.PatchPacketMirroringRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PacketMirroringList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -2113,8 +3176,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListPacketMirroringsRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchPacketMirroringRequest ): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2122,7 +3185,36 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "packet_mirroring": "sample3", + } + request_init["packet_mirroring_resource"] = { + "collector_ilb": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable": "enable_value", + "filter": { + "I_p_protocols": ["I_p_protocols_value_1", "I_p_protocols_value_2"], + "cidr_ranges": ["cidr_ranges_value_1", "cidr_ranges_value_2"], + "direction": "direction_value", + }, + "id": 205, + "kind": "kind_value", + "mirrored_resources": { + "instances": [{"canonical_url": "canonical_url_value", "url": "url_value"}], + "subnetworks": [ + {"canonical_url": "canonical_url_value", "url": "url_value"} + ], + "tags": ["tags_value_1", "tags_value_2"], + }, + "name": "name_value", + "network": {"canonical_url": "canonical_url_value", "url": "url_value"}, + "priority": 898, + "region": "region_value", + "self_link": "self_link_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2134,10 +3226,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2146,40 +3238,50 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PacketMirroringList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "packet_mirroring": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + packet_mirroring="packet_mirroring_value", + packet_mirroring_resource=compute.PacketMirroring( + collector_ilb=compute.PacketMirroringForwardingRuleInfo( + canonical_url="canonical_url_value" + ) + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PacketMirroringList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/packetMirrorings" + "%s/compute/v1/projects/{project}/regions/{region}/packetMirrorings/{packet_mirroring}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = PacketMirroringsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2188,73 +3290,24 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListPacketMirroringsRequest(), + client.patch( + compute.PatchPacketMirroringRequest(), project="project_value", region="region_value", + packet_mirroring="packet_mirroring_value", + packet_mirroring_resource=compute.PacketMirroring( + collector_ilb=compute.PacketMirroringForwardingRuleInfo( + canonical_url="canonical_url_value" + ) + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = PacketMirroringsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.PacketMirroringList( - items=[ - compute.PacketMirroring(), - compute.PacketMirroring(), - compute.PacketMirroring(), - ], - next_page_token="abc", - ), - compute.PacketMirroringList( - items=[], - next_page_token="def", - ), - compute.PacketMirroringList( - items=[ - compute.PacketMirroring(), - ], - next_page_token="ghi", - ), - compute.PacketMirroringList( - items=[ - compute.PacketMirroring(), - compute.PacketMirroring(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.PacketMirroringList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.PacketMirroring) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2340,28 +3393,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -3022,6 +4053,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = PacketMirroringsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_packet_mirrorings_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3059,6 +4103,14 @@ def test_packet_mirrorings_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_packet_mirrorings_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_projects.py b/tests/unit/gapic/compute_v1/test_projects.py index d62e29f39..b1cd9eae1 100644 --- a/tests/unit/gapic/compute_v1/test_projects.py +++ b/tests/unit/gapic/compute_v1/test_projects.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -512,7 +514,7 @@ def test_projects_client_client_options_credentials_file( dict, ], ) -def test_disable_xpn_host_unary_rest(request_type): +def test_disable_xpn_host_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -556,10 +558,10 @@ def test_disable_xpn_host_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.disable_xpn_host_unary(request) + response = client.disable_xpn_host(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -584,7 +586,7 @@ def test_disable_xpn_host_unary_rest(request_type): assert response.zone == "zone_value" -def test_disable_xpn_host_unary_rest_required_fields( +def test_disable_xpn_host_rest_required_fields( request_type=compute.DisableXpnHostProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -649,14 +651,14 @@ def test_disable_xpn_host_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.disable_xpn_host_unary(request) + response = client.disable_xpn_host(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_disable_xpn_host_unary_rest_unset_required_fields(): +def test_disable_xpn_host_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -666,7 +668,7 @@ def test_disable_xpn_host_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_disable_xpn_host_unary_rest_interceptors(null_interceptor): +def test_disable_xpn_host_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -704,7 +706,7 @@ def test_disable_xpn_host_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.disable_xpn_host_unary( + client.disable_xpn_host( request, metadata=[ ("key", "val"), @@ -716,7 +718,7 @@ def test_disable_xpn_host_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_disable_xpn_host_unary_rest_bad_request( +def test_disable_xpn_host_rest_bad_request( transport: str = "rest", request_type=compute.DisableXpnHostProjectRequest ): client = ProjectsClient( @@ -737,10 +739,10 @@ def test_disable_xpn_host_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.disable_xpn_host_unary(request) + client.disable_xpn_host(request) -def test_disable_xpn_host_unary_rest_flattened(): +def test_disable_xpn_host_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -768,7 +770,7 @@ def test_disable_xpn_host_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.disable_xpn_host_unary(**mock_args) + client.disable_xpn_host(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -780,7 +782,7 @@ def test_disable_xpn_host_unary_rest_flattened(): ) -def test_disable_xpn_host_unary_rest_flattened_error(transport: str = "rest"): +def test_disable_xpn_host_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -789,13 +791,13 @@ def test_disable_xpn_host_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.disable_xpn_host_unary( + client.disable_xpn_host( compute.DisableXpnHostProjectRequest(), project="project_value", ) -def test_disable_xpn_host_unary_rest_error(): +def test_disable_xpn_host_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -804,11 +806,11 @@ def test_disable_xpn_host_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DisableXpnResourceProjectRequest, + compute.DisableXpnHostProjectRequest, dict, ], ) -def test_disable_xpn_resource_unary_rest(request_type): +def test_disable_xpn_host_unary_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -816,9 +818,6 @@ def test_disable_xpn_resource_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_disable_xpn_resource_request_resource"] = { - "xpn_resource": {"id": "id_value", "type_": "type__value"} - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -855,36 +854,14 @@ def test_disable_xpn_resource_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.disable_xpn_resource_unary(request) + response = client.disable_xpn_host_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_disable_xpn_resource_unary_rest_required_fields( - request_type=compute.DisableXpnResourceProjectRequest, +def test_disable_xpn_host_unary_rest_required_fields( + request_type=compute.DisableXpnHostProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -901,7 +878,7 @@ def test_disable_xpn_resource_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).disable_xpn_resource._get_unset_required_fields(jsonified_request) + ).disable_xpn_host._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -910,7 +887,7 @@ def test_disable_xpn_resource_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).disable_xpn_resource._get_unset_required_fields(jsonified_request) + ).disable_xpn_host._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -940,7 +917,6 @@ def test_disable_xpn_resource_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -949,32 +925,24 @@ def test_disable_xpn_resource_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.disable_xpn_resource_unary(request) + response = client.disable_xpn_host_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_disable_xpn_resource_unary_rest_unset_required_fields(): +def test_disable_xpn_host_unary_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.disable_xpn_resource._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("requestId",)) - & set( - ( - "project", - "projectsDisableXpnResourceRequestResource", - ) - ) - ) + unset_fields = transport.disable_xpn_host._get_unset_required_fields({}) + assert set(unset_fields) == (set(("requestId",)) & set(("project",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): +def test_disable_xpn_host_unary_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -985,9 +953,9 @@ def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_disable_xpn_resource" + transports.ProjectsRestInterceptor, "post_disable_xpn_host" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_disable_xpn_resource" + transports.ProjectsRestInterceptor, "pre_disable_xpn_host" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1004,7 +972,7 @@ def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DisableXpnResourceProjectRequest() + request = compute.DisableXpnHostProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1012,7 +980,7 @@ def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.disable_xpn_resource_unary( + client.disable_xpn_host_unary( request, metadata=[ ("key", "val"), @@ -1024,8 +992,8 @@ def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_disable_xpn_resource_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DisableXpnResourceProjectRequest +def test_disable_xpn_host_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DisableXpnHostProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1034,9 +1002,6 @@ def test_disable_xpn_resource_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_disable_xpn_resource_request_resource"] = { - "xpn_resource": {"id": "id_value", "type_": "type__value"} - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1048,10 +1013,10 @@ def test_disable_xpn_resource_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.disable_xpn_resource_unary(request) + client.disable_xpn_host_unary(request) -def test_disable_xpn_resource_unary_rest_flattened(): +def test_disable_xpn_host_unary_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1068,9 +1033,6 @@ def test_disable_xpn_resource_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - projects_disable_xpn_resource_request_resource=compute.ProjectsDisableXpnResourceRequest( - xpn_resource=compute.XpnResourceId(id="id_value") - ), ) mock_args.update(sample_request) @@ -1082,20 +1044,19 @@ def test_disable_xpn_resource_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.disable_xpn_resource_unary(**mock_args) + client.disable_xpn_host_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/disableXpnResource" - % client.transport._host, + "%s/compute/v1/projects/{project}/disableXpnHost" % client.transport._host, args[1], ) -def test_disable_xpn_resource_unary_rest_flattened_error(transport: str = "rest"): +def test_disable_xpn_host_unary_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1104,16 +1065,13 @@ def test_disable_xpn_resource_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.disable_xpn_resource_unary( - compute.DisableXpnResourceProjectRequest(), + client.disable_xpn_host_unary( + compute.DisableXpnHostProjectRequest(), project="project_value", - projects_disable_xpn_resource_request_resource=compute.ProjectsDisableXpnResourceRequest( - xpn_resource=compute.XpnResourceId(id="id_value") - ), ) -def test_disable_xpn_resource_unary_rest_error(): +def test_disable_xpn_host_unary_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1122,11 +1080,11 @@ def test_disable_xpn_resource_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.EnableXpnHostProjectRequest, + compute.DisableXpnResourceProjectRequest, dict, ], ) -def test_enable_xpn_host_unary_rest(request_type): +def test_disable_xpn_resource_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1134,6 +1092,9 @@ def test_enable_xpn_host_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["projects_disable_xpn_resource_request_resource"] = { + "xpn_resource": {"id": "id_value", "type_": "type__value"} + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1170,10 +1131,10 @@ def test_enable_xpn_host_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.enable_xpn_host_unary(request) + response = client.disable_xpn_resource(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1198,8 +1159,8 @@ def test_enable_xpn_host_unary_rest(request_type): assert response.zone == "zone_value" -def test_enable_xpn_host_unary_rest_required_fields( - request_type=compute.EnableXpnHostProjectRequest, +def test_disable_xpn_resource_rest_required_fields( + request_type=compute.DisableXpnResourceProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -1216,7 +1177,7 @@ def test_enable_xpn_host_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).enable_xpn_host._get_unset_required_fields(jsonified_request) + ).disable_xpn_resource._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1225,7 +1186,7 @@ def test_enable_xpn_host_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).enable_xpn_host._get_unset_required_fields(jsonified_request) + ).disable_xpn_resource._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1255,6 +1216,7 @@ def test_enable_xpn_host_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1263,24 +1225,32 @@ def test_enable_xpn_host_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.enable_xpn_host_unary(request) + response = client.disable_xpn_resource(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_enable_xpn_host_unary_rest_unset_required_fields(): +def test_disable_xpn_resource_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.enable_xpn_host._get_unset_required_fields({}) - assert set(unset_fields) == (set(("requestId",)) & set(("project",))) + unset_fields = transport.disable_xpn_resource._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "projectsDisableXpnResourceRequestResource", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): +def test_disable_xpn_resource_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -1291,9 +1261,9 @@ def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_enable_xpn_host" + transports.ProjectsRestInterceptor, "post_disable_xpn_resource" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_enable_xpn_host" + transports.ProjectsRestInterceptor, "pre_disable_xpn_resource" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1310,7 +1280,7 @@ def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.EnableXpnHostProjectRequest() + request = compute.DisableXpnResourceProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1318,7 +1288,7 @@ def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.enable_xpn_host_unary( + client.disable_xpn_resource( request, metadata=[ ("key", "val"), @@ -1330,8 +1300,8 @@ def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_enable_xpn_host_unary_rest_bad_request( - transport: str = "rest", request_type=compute.EnableXpnHostProjectRequest +def test_disable_xpn_resource_rest_bad_request( + transport: str = "rest", request_type=compute.DisableXpnResourceProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1340,6 +1310,9 @@ def test_enable_xpn_host_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["projects_disable_xpn_resource_request_resource"] = { + "xpn_resource": {"id": "id_value", "type_": "type__value"} + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1351,10 +1324,10 @@ def test_enable_xpn_host_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.enable_xpn_host_unary(request) + client.disable_xpn_resource(request) -def test_enable_xpn_host_unary_rest_flattened(): +def test_disable_xpn_resource_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1371,6 +1344,9 @@ def test_enable_xpn_host_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", + projects_disable_xpn_resource_request_resource=compute.ProjectsDisableXpnResourceRequest( + xpn_resource=compute.XpnResourceId(id="id_value") + ), ) mock_args.update(sample_request) @@ -1382,19 +1358,20 @@ def test_enable_xpn_host_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.enable_xpn_host_unary(**mock_args) + client.disable_xpn_resource(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/enableXpnHost" % client.transport._host, + "%s/compute/v1/projects/{project}/disableXpnResource" + % client.transport._host, args[1], ) -def test_enable_xpn_host_unary_rest_flattened_error(transport: str = "rest"): +def test_disable_xpn_resource_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1403,13 +1380,16 @@ def test_enable_xpn_host_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.enable_xpn_host_unary( - compute.EnableXpnHostProjectRequest(), + client.disable_xpn_resource( + compute.DisableXpnResourceProjectRequest(), project="project_value", + projects_disable_xpn_resource_request_resource=compute.ProjectsDisableXpnResourceRequest( + xpn_resource=compute.XpnResourceId(id="id_value") + ), ) -def test_enable_xpn_host_unary_rest_error(): +def test_disable_xpn_resource_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1418,11 +1398,11 @@ def test_enable_xpn_host_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.EnableXpnResourceProjectRequest, + compute.DisableXpnResourceProjectRequest, dict, ], ) -def test_enable_xpn_resource_unary_rest(request_type): +def test_disable_xpn_resource_unary_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1430,7 +1410,7 @@ def test_enable_xpn_resource_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_enable_xpn_resource_request_resource"] = { + request_init["projects_disable_xpn_resource_request_resource"] = { "xpn_resource": {"id": "id_value", "type_": "type__value"} } request = request_type(request_init) @@ -1469,36 +1449,14 @@ def test_enable_xpn_resource_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.enable_xpn_resource_unary(request) + response = client.disable_xpn_resource_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_enable_xpn_resource_unary_rest_required_fields( - request_type=compute.EnableXpnResourceProjectRequest, +def test_disable_xpn_resource_unary_rest_required_fields( + request_type=compute.DisableXpnResourceProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -1515,7 +1473,7 @@ def test_enable_xpn_resource_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).enable_xpn_resource._get_unset_required_fields(jsonified_request) + ).disable_xpn_resource._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1524,7 +1482,7 @@ def test_enable_xpn_resource_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).enable_xpn_resource._get_unset_required_fields(jsonified_request) + ).disable_xpn_resource._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1563,32 +1521,32 @@ def test_enable_xpn_resource_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.enable_xpn_resource_unary(request) + response = client.disable_xpn_resource_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_enable_xpn_resource_unary_rest_unset_required_fields(): +def test_disable_xpn_resource_unary_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.enable_xpn_resource._get_unset_required_fields({}) + unset_fields = transport.disable_xpn_resource._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "projectsEnableXpnResourceRequestResource", + "projectsDisableXpnResourceRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): +def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -1599,9 +1557,9 @@ def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_enable_xpn_resource" + transports.ProjectsRestInterceptor, "post_disable_xpn_resource" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_enable_xpn_resource" + transports.ProjectsRestInterceptor, "pre_disable_xpn_resource" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1618,7 +1576,7 @@ def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.EnableXpnResourceProjectRequest() + request = compute.DisableXpnResourceProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1626,7 +1584,7 @@ def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.enable_xpn_resource_unary( + client.disable_xpn_resource_unary( request, metadata=[ ("key", "val"), @@ -1638,8 +1596,8 @@ def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_enable_xpn_resource_unary_rest_bad_request( - transport: str = "rest", request_type=compute.EnableXpnResourceProjectRequest +def test_disable_xpn_resource_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DisableXpnResourceProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1648,7 +1606,7 @@ def test_enable_xpn_resource_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_enable_xpn_resource_request_resource"] = { + request_init["projects_disable_xpn_resource_request_resource"] = { "xpn_resource": {"id": "id_value", "type_": "type__value"} } request = request_type(request_init) @@ -1662,10 +1620,10 @@ def test_enable_xpn_resource_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.enable_xpn_resource_unary(request) + client.disable_xpn_resource_unary(request) -def test_enable_xpn_resource_unary_rest_flattened(): +def test_disable_xpn_resource_unary_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1682,7 +1640,7 @@ def test_enable_xpn_resource_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - projects_enable_xpn_resource_request_resource=compute.ProjectsEnableXpnResourceRequest( + projects_disable_xpn_resource_request_resource=compute.ProjectsDisableXpnResourceRequest( xpn_resource=compute.XpnResourceId(id="id_value") ), ) @@ -1696,20 +1654,20 @@ def test_enable_xpn_resource_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.enable_xpn_resource_unary(**mock_args) + client.disable_xpn_resource_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/enableXpnResource" + "%s/compute/v1/projects/{project}/disableXpnResource" % client.transport._host, args[1], ) -def test_enable_xpn_resource_unary_rest_flattened_error(transport: str = "rest"): +def test_disable_xpn_resource_unary_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1718,16 +1676,16 @@ def test_enable_xpn_resource_unary_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.enable_xpn_resource_unary( - compute.EnableXpnResourceProjectRequest(), + client.disable_xpn_resource_unary( + compute.DisableXpnResourceProjectRequest(), project="project_value", - projects_enable_xpn_resource_request_resource=compute.ProjectsEnableXpnResourceRequest( + projects_disable_xpn_resource_request_resource=compute.ProjectsDisableXpnResourceRequest( xpn_resource=compute.XpnResourceId(id="id_value") ), ) -def test_enable_xpn_resource_unary_rest_error(): +def test_disable_xpn_resource_unary_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1736,11 +1694,11 @@ def test_enable_xpn_resource_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetProjectRequest, + compute.EnableXpnHostProjectRequest, dict, ], ) -def test_get_rest(request_type): +def test_enable_xpn_host_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1753,42 +1711,68 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Project( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_network_tier="default_network_tier_value", - default_service_account="default_service_account_value", description="description_value", - enabled_features=["enabled_features_value"], + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - xpn_project_status="xpn_project_status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Project.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.enable_xpn_host(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Project) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_network_tier == "default_network_tier_value" - assert response.default_service_account == "default_service_account_value" assert response.description == "description_value" - assert response.enabled_features == ["enabled_features_value"] + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.xpn_project_status == "xpn_project_status_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetProjectRequest): +def test_enable_xpn_host_rest_required_fields( + request_type=compute.EnableXpnHostProjectRequest, +): transport_class = transports.ProjectsRestTransport request_init = {} @@ -1804,7 +1788,7 @@ def test_get_rest_required_fields(request_type=compute.GetProjectRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).enable_xpn_host._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1813,7 +1797,9 @@ def test_get_rest_required_fields(request_type=compute.GetProjectRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).enable_xpn_host._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1827,7 +1813,7 @@ def test_get_rest_required_fields(request_type=compute.GetProjectRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Project() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1838,35 +1824,35 @@ def test_get_rest_required_fields(request_type=compute.GetProjectRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Project.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.enable_xpn_host(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_enable_xpn_host_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("project",))) + unset_fields = transport.enable_xpn_host._get_unset_required_fields({}) + assert set(unset_fields) == (set(("requestId",)) & set(("project",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_enable_xpn_host_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -1877,9 +1863,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_get" + transports.ProjectsRestInterceptor, "post_enable_xpn_host" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_get" + transports.ProjectsRestInterceptor, "pre_enable_xpn_host" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1894,17 +1880,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Project.to_json(compute.Project()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetProjectRequest() + request = compute.EnableXpnHostProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Project + post.return_value = compute.Operation - client.get( + client.enable_xpn_host( request, metadata=[ ("key", "val"), @@ -1916,8 +1902,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetProjectRequest +def test_enable_xpn_host_rest_bad_request( + transport: str = "rest", request_type=compute.EnableXpnHostProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1937,10 +1923,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.enable_xpn_host(request) -def test_get_rest_flattened(): +def test_enable_xpn_host_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1949,7 +1935,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Project() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1963,23 +1949,24 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Project.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.enable_xpn_host(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}" % client.transport._host, args[1] + "%s/compute/v1/projects/{project}/enableXpnHost" % client.transport._host, + args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_enable_xpn_host_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1988,13 +1975,13 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetProjectRequest(), + client.enable_xpn_host( + compute.EnableXpnHostProjectRequest(), project="project_value", ) -def test_get_rest_error(): +def test_enable_xpn_host_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2003,11 +1990,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetXpnHostProjectRequest, + compute.EnableXpnHostProjectRequest, dict, ], ) -def test_get_xpn_host_rest(request_type): +def test_enable_xpn_host_unary_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2020,43 +2007,45 @@ def test_get_xpn_host_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Project( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_network_tier="default_network_tier_value", - default_service_account="default_service_account_value", description="description_value", - enabled_features=["enabled_features_value"], + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - xpn_project_status="xpn_project_status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Project.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_xpn_host(request) + response = client.enable_xpn_host_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Project) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_network_tier == "default_network_tier_value" - assert response.default_service_account == "default_service_account_value" - assert response.description == "description_value" - assert response.enabled_features == ["enabled_features_value"] - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.self_link == "self_link_value" - assert response.xpn_project_status == "xpn_project_status_value" + assert isinstance(response, compute.Operation) -def test_get_xpn_host_rest_required_fields( - request_type=compute.GetXpnHostProjectRequest, +def test_enable_xpn_host_unary_rest_required_fields( + request_type=compute.EnableXpnHostProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -2073,7 +2062,7 @@ def test_get_xpn_host_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_xpn_host._get_unset_required_fields(jsonified_request) + ).enable_xpn_host._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2082,7 +2071,9 @@ def test_get_xpn_host_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_xpn_host._get_unset_required_fields(jsonified_request) + ).enable_xpn_host._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2096,7 +2087,7 @@ def test_get_xpn_host_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Project() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2107,35 +2098,35 @@ def test_get_xpn_host_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Project.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_xpn_host(request) + response = client.enable_xpn_host_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_xpn_host_rest_unset_required_fields(): +def test_enable_xpn_host_unary_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_xpn_host._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("project",))) + unset_fields = transport.enable_xpn_host._get_unset_required_fields({}) + assert set(unset_fields) == (set(("requestId",)) & set(("project",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_xpn_host_rest_interceptors(null_interceptor): +def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -2146,9 +2137,9 @@ def test_get_xpn_host_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_get_xpn_host" + transports.ProjectsRestInterceptor, "post_enable_xpn_host" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_get_xpn_host" + transports.ProjectsRestInterceptor, "pre_enable_xpn_host" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2163,17 +2154,17 @@ def test_get_xpn_host_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Project.to_json(compute.Project()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetXpnHostProjectRequest() + request = compute.EnableXpnHostProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Project + post.return_value = compute.Operation - client.get_xpn_host( + client.enable_xpn_host_unary( request, metadata=[ ("key", "val"), @@ -2185,8 +2176,8 @@ def test_get_xpn_host_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_xpn_host_rest_bad_request( - transport: str = "rest", request_type=compute.GetXpnHostProjectRequest +def test_enable_xpn_host_unary_rest_bad_request( + transport: str = "rest", request_type=compute.EnableXpnHostProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2206,10 +2197,10 @@ def test_get_xpn_host_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_xpn_host(request) + client.enable_xpn_host_unary(request) -def test_get_xpn_host_rest_flattened(): +def test_enable_xpn_host_unary_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2218,7 +2209,7 @@ def test_get_xpn_host_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Project() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -2232,24 +2223,24 @@ def test_get_xpn_host_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Project.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_xpn_host(**mock_args) + client.enable_xpn_host_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/getXpnHost" % client.transport._host, + "%s/compute/v1/projects/{project}/enableXpnHost" % client.transport._host, args[1], ) -def test_get_xpn_host_rest_flattened_error(transport: str = "rest"): +def test_enable_xpn_host_unary_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2258,13 +2249,13 @@ def test_get_xpn_host_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_xpn_host( - compute.GetXpnHostProjectRequest(), + client.enable_xpn_host_unary( + compute.EnableXpnHostProjectRequest(), project="project_value", ) -def test_get_xpn_host_rest_error(): +def test_enable_xpn_host_unary_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2273,11 +2264,11 @@ def test_get_xpn_host_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetXpnResourcesProjectsRequest, + compute.EnableXpnResourceProjectRequest, dict, ], ) -def test_get_xpn_resources_rest(request_type): +def test_enable_xpn_resource_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2285,39 +2276,2832 @@ def test_get_xpn_resources_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["projects_enable_xpn_resource_request_resource"] = { + "xpn_resource": {"id": "id_value", "type_": "type__value"} + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ProjectsGetXpnResources( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ProjectsGetXpnResources.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_xpn_resources(request) + response = client.enable_xpn_resource(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GetXpnResourcesPager) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - - -def test_get_xpn_resources_rest_required_fields( - request_type=compute.GetXpnResourcesProjectsRequest, -): - transport_class = transports.ProjectsRestTransport - - request_init = {} - request_init["project"] = "" - request = request_type(request_init) - jsonified_request = json.loads( + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_enable_xpn_resource_rest_required_fields( + request_type=compute.EnableXpnResourceProjectRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).enable_xpn_resource._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).enable_xpn_resource._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.enable_xpn_resource(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_enable_xpn_resource_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.enable_xpn_resource._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "projectsEnableXpnResourceRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_enable_xpn_resource_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_enable_xpn_resource" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_enable_xpn_resource" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.EnableXpnResourceProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.enable_xpn_resource( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_enable_xpn_resource_rest_bad_request( + transport: str = "rest", request_type=compute.EnableXpnResourceProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["projects_enable_xpn_resource_request_resource"] = { + "xpn_resource": {"id": "id_value", "type_": "type__value"} + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.enable_xpn_resource(request) + + +def test_enable_xpn_resource_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + projects_enable_xpn_resource_request_resource=compute.ProjectsEnableXpnResourceRequest( + xpn_resource=compute.XpnResourceId(id="id_value") + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.enable_xpn_resource(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/enableXpnResource" + % client.transport._host, + args[1], + ) + + +def test_enable_xpn_resource_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.enable_xpn_resource( + compute.EnableXpnResourceProjectRequest(), + project="project_value", + projects_enable_xpn_resource_request_resource=compute.ProjectsEnableXpnResourceRequest( + xpn_resource=compute.XpnResourceId(id="id_value") + ), + ) + + +def test_enable_xpn_resource_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.EnableXpnResourceProjectRequest, + dict, + ], +) +def test_enable_xpn_resource_unary_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["projects_enable_xpn_resource_request_resource"] = { + "xpn_resource": {"id": "id_value", "type_": "type__value"} + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.enable_xpn_resource_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_enable_xpn_resource_unary_rest_required_fields( + request_type=compute.EnableXpnResourceProjectRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).enable_xpn_resource._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).enable_xpn_resource._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.enable_xpn_resource_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_enable_xpn_resource_unary_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.enable_xpn_resource._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "projectsEnableXpnResourceRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_enable_xpn_resource" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_enable_xpn_resource" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.EnableXpnResourceProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.enable_xpn_resource_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_enable_xpn_resource_unary_rest_bad_request( + transport: str = "rest", request_type=compute.EnableXpnResourceProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["projects_enable_xpn_resource_request_resource"] = { + "xpn_resource": {"id": "id_value", "type_": "type__value"} + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.enable_xpn_resource_unary(request) + + +def test_enable_xpn_resource_unary_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + projects_enable_xpn_resource_request_resource=compute.ProjectsEnableXpnResourceRequest( + xpn_resource=compute.XpnResourceId(id="id_value") + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.enable_xpn_resource_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/enableXpnResource" + % client.transport._host, + args[1], + ) + + +def test_enable_xpn_resource_unary_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.enable_xpn_resource_unary( + compute.EnableXpnResourceProjectRequest(), + project="project_value", + projects_enable_xpn_resource_request_resource=compute.ProjectsEnableXpnResourceRequest( + xpn_resource=compute.XpnResourceId(id="id_value") + ), + ) + + +def test_enable_xpn_resource_unary_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetProjectRequest, + dict, + ], +) +def test_get_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Project( + creation_timestamp="creation_timestamp_value", + default_network_tier="default_network_tier_value", + default_service_account="default_service_account_value", + description="description_value", + enabled_features=["enabled_features_value"], + id=205, + kind="kind_value", + name="name_value", + self_link="self_link_value", + xpn_project_status="xpn_project_status_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Project.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Project) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_network_tier == "default_network_tier_value" + assert response.default_service_account == "default_service_account_value" + assert response.description == "description_value" + assert response.enabled_features == ["enabled_features_value"] + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.self_link == "self_link_value" + assert response.xpn_project_status == "xpn_project_status_value" + + +def test_get_rest_required_fields(request_type=compute.GetProjectRequest): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Project() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Project.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("project",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Project.to_json(compute.Project()) + + request = compute.GetProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Project + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Project() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Project.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}" % client.transport._host, args[1] + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetProjectRequest(), + project="project_value", + ) + + +def test_get_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetXpnHostProjectRequest, + dict, + ], +) +def test_get_xpn_host_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Project( + creation_timestamp="creation_timestamp_value", + default_network_tier="default_network_tier_value", + default_service_account="default_service_account_value", + description="description_value", + enabled_features=["enabled_features_value"], + id=205, + kind="kind_value", + name="name_value", + self_link="self_link_value", + xpn_project_status="xpn_project_status_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Project.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_xpn_host(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Project) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_network_tier == "default_network_tier_value" + assert response.default_service_account == "default_service_account_value" + assert response.description == "description_value" + assert response.enabled_features == ["enabled_features_value"] + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.self_link == "self_link_value" + assert response.xpn_project_status == "xpn_project_status_value" + + +def test_get_xpn_host_rest_required_fields( + request_type=compute.GetXpnHostProjectRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_xpn_host._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_xpn_host._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Project() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Project.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_xpn_host(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_xpn_host_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_xpn_host._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("project",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_xpn_host_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_get_xpn_host" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_get_xpn_host" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Project.to_json(compute.Project()) + + request = compute.GetXpnHostProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Project + + client.get_xpn_host( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_xpn_host_rest_bad_request( + transport: str = "rest", request_type=compute.GetXpnHostProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_xpn_host(request) + + +def test_get_xpn_host_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Project() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Project.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_xpn_host(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/getXpnHost" % client.transport._host, + args[1], + ) + + +def test_get_xpn_host_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_xpn_host( + compute.GetXpnHostProjectRequest(), + project="project_value", + ) + + +def test_get_xpn_host_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetXpnResourcesProjectsRequest, + dict, + ], +) +def test_get_xpn_resources_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ProjectsGetXpnResources( + kind="kind_value", + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ProjectsGetXpnResources.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_xpn_resources(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GetXpnResourcesPager) + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + + +def test_get_xpn_resources_rest_required_fields( + request_type=compute.GetXpnResourcesProjectsRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_xpn_resources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_xpn_resources._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ProjectsGetXpnResources() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ProjectsGetXpnResources.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_xpn_resources(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_xpn_resources_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_xpn_resources._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_xpn_resources_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_get_xpn_resources" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_get_xpn_resources" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ProjectsGetXpnResources.to_json( + compute.ProjectsGetXpnResources() + ) + + request = compute.GetXpnResourcesProjectsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ProjectsGetXpnResources + + client.get_xpn_resources( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_xpn_resources_rest_bad_request( + transport: str = "rest", request_type=compute.GetXpnResourcesProjectsRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_xpn_resources(request) + + +def test_get_xpn_resources_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ProjectsGetXpnResources() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ProjectsGetXpnResources.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_xpn_resources(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/getXpnResources" % client.transport._host, + args[1], + ) + + +def test_get_xpn_resources_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_xpn_resources( + compute.GetXpnResourcesProjectsRequest(), + project="project_value", + ) + + +def test_get_xpn_resources_rest_pager(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ProjectsGetXpnResources( + resources=[ + compute.XpnResourceId(), + compute.XpnResourceId(), + compute.XpnResourceId(), + ], + next_page_token="abc", + ), + compute.ProjectsGetXpnResources( + resources=[], + next_page_token="def", + ), + compute.ProjectsGetXpnResources( + resources=[ + compute.XpnResourceId(), + ], + next_page_token="ghi", + ), + compute.ProjectsGetXpnResources( + resources=[ + compute.XpnResourceId(), + compute.XpnResourceId(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ProjectsGetXpnResources.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.get_xpn_resources(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.XpnResourceId) for i in results) + + pages = list(client.get_xpn_resources(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListXpnHostsProjectsRequest, + dict, + ], +) +def test_list_xpn_hosts_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["projects_list_xpn_hosts_request_resource"] = { + "organization": "organization_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.XpnHostList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.XpnHostList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_xpn_hosts(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListXpnHostsPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_xpn_hosts_rest_required_fields( + request_type=compute.ListXpnHostsProjectsRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_xpn_hosts._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_xpn_hosts._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.XpnHostList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.XpnHostList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_xpn_hosts(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_xpn_hosts_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_xpn_hosts._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "projectsListXpnHostsRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_xpn_hosts_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_list_xpn_hosts" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_list_xpn_hosts" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.XpnHostList.to_json(compute.XpnHostList()) + + request = compute.ListXpnHostsProjectsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.XpnHostList + + client.list_xpn_hosts( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_xpn_hosts_rest_bad_request( + transport: str = "rest", request_type=compute.ListXpnHostsProjectsRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["projects_list_xpn_hosts_request_resource"] = { + "organization": "organization_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_xpn_hosts(request) + + +def test_list_xpn_hosts_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.XpnHostList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + projects_list_xpn_hosts_request_resource=compute.ProjectsListXpnHostsRequest( + organization="organization_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.XpnHostList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_xpn_hosts(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/listXpnHosts" % client.transport._host, + args[1], + ) + + +def test_list_xpn_hosts_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_xpn_hosts( + compute.ListXpnHostsProjectsRequest(), + project="project_value", + projects_list_xpn_hosts_request_resource=compute.ProjectsListXpnHostsRequest( + organization="organization_value" + ), + ) + + +def test_list_xpn_hosts_rest_pager(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.XpnHostList( + items=[ + compute.Project(), + compute.Project(), + compute.Project(), + ], + next_page_token="abc", + ), + compute.XpnHostList( + items=[], + next_page_token="def", + ), + compute.XpnHostList( + items=[ + compute.Project(), + ], + next_page_token="ghi", + ), + compute.XpnHostList( + items=[ + compute.Project(), + compute.Project(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.XpnHostList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + sample_request[ + "projects_list_xpn_hosts_request_resource" + ] = compute.ProjectsListXpnHostsRequest(organization="organization_value") + + pager = client.list_xpn_hosts(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Project) for i in results) + + pages = list(client.list_xpn_hosts(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.MoveDiskProjectRequest, + dict, + ], +) +def test_move_disk_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["disk_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_disk": "target_disk_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.move_disk(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_move_disk_rest_required_fields(request_type=compute.MoveDiskProjectRequest): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move_disk._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move_disk._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.move_disk(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_move_disk_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.move_disk._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "diskMoveRequestResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_move_disk_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_move_disk" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_move_disk" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.MoveDiskProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.move_disk( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_move_disk_rest_bad_request( + transport: str = "rest", request_type=compute.MoveDiskProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["disk_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_disk": "target_disk_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.move_disk(request) + + +def test_move_disk_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + disk_move_request_resource=compute.DiskMoveRequest( + destination_zone="destination_zone_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.move_disk(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/moveDisk" % client.transport._host, + args[1], + ) + + +def test_move_disk_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.move_disk( + compute.MoveDiskProjectRequest(), + project="project_value", + disk_move_request_resource=compute.DiskMoveRequest( + destination_zone="destination_zone_value" + ), + ) + + +def test_move_disk_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.MoveDiskProjectRequest, + dict, + ], +) +def test_move_disk_unary_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["disk_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_disk": "target_disk_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.move_disk_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_move_disk_unary_rest_required_fields( + request_type=compute.MoveDiskProjectRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move_disk._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move_disk._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.move_disk_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_move_disk_unary_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.move_disk._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "diskMoveRequestResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_move_disk_unary_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_move_disk" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_move_disk" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.MoveDiskProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.move_disk_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_move_disk_unary_rest_bad_request( + transport: str = "rest", request_type=compute.MoveDiskProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["disk_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_disk": "target_disk_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.move_disk_unary(request) + + +def test_move_disk_unary_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + disk_move_request_resource=compute.DiskMoveRequest( + destination_zone="destination_zone_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.move_disk_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/moveDisk" % client.transport._host, + args[1], + ) + + +def test_move_disk_unary_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.move_disk_unary( + compute.MoveDiskProjectRequest(), + project="project_value", + disk_move_request_resource=compute.DiskMoveRequest( + destination_zone="destination_zone_value" + ), + ) + + +def test_move_disk_unary_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.MoveInstanceProjectRequest, + dict, + ], +) +def test_move_instance_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["instance_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_instance": "target_instance_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.move_instance(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_move_instance_rest_required_fields( + request_type=compute.MoveInstanceProjectRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move_instance._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).move_instance._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.move_instance(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_move_instance_rest_unset_required_fields(): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.move_instance._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceMoveRequestResource", + "project", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_move_instance_rest_interceptors(null_interceptor): + transport = transports.ProjectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), + ) + client = ProjectsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ProjectsRestInterceptor, "post_move_instance" + ) as post, mock.patch.object( + transports.ProjectsRestInterceptor, "pre_move_instance" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.MoveInstanceProjectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.move_instance( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_move_instance_rest_bad_request( + transport: str = "rest", request_type=compute.MoveInstanceProjectRequest +): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["instance_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_instance": "target_instance_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.move_instance(request) + + +def test_move_instance_rest_flattened(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + instance_move_request_resource=compute.InstanceMoveRequest( + destination_zone="destination_zone_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.move_instance(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/moveInstance" % client.transport._host, + args[1], + ) + + +def test_move_instance_rest_flattened_error(transport: str = "rest"): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.move_instance( + compute.MoveInstanceProjectRequest(), + project="project_value", + instance_move_request_resource=compute.InstanceMoveRequest( + destination_zone="destination_zone_value" + ), + ) + + +def test_move_instance_rest_error(): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.MoveInstanceProjectRequest, + dict, + ], +) +def test_move_instance_unary_rest(request_type): + client = ProjectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["instance_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_instance": "target_instance_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.move_instance_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_move_instance_unary_rest_required_fields( + request_type=compute.MoveInstanceProjectRequest, +): + transport_class = transports.ProjectsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( request_type.to_json( request, including_default_value_fields=False, use_integers_for_enums=False ) @@ -2327,7 +5111,7 @@ def test_get_xpn_resources_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_xpn_resources._get_unset_required_fields(jsonified_request) + ).move_instance._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2336,17 +5120,9 @@ def test_get_xpn_resources_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_xpn_resources._get_unset_required_fields(jsonified_request) + ).move_instance._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2360,7 +5136,7 @@ def test_get_xpn_resources_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ProjectsGetXpnResources() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2371,46 +5147,44 @@ def test_get_xpn_resources_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ProjectsGetXpnResources.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_xpn_resources(request) + response = client.move_instance_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_xpn_resources_rest_unset_required_fields(): +def test_move_instance_unary_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_xpn_resources._get_unset_required_fields({}) + unset_fields = transport.move_instance._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "instanceMoveRequestResource", + "project", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_xpn_resources_rest_interceptors(null_interceptor): +def test_move_instance_unary_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -2421,9 +5195,9 @@ def test_get_xpn_resources_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_get_xpn_resources" + transports.ProjectsRestInterceptor, "post_move_instance" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_get_xpn_resources" + transports.ProjectsRestInterceptor, "pre_move_instance" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2438,19 +5212,17 @@ def test_get_xpn_resources_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ProjectsGetXpnResources.to_json( - compute.ProjectsGetXpnResources() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetXpnResourcesProjectsRequest() + request = compute.MoveInstanceProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ProjectsGetXpnResources + post.return_value = compute.Operation - client.get_xpn_resources( + client.move_instance_unary( request, metadata=[ ("key", "val"), @@ -2462,8 +5234,8 @@ def test_get_xpn_resources_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_xpn_resources_rest_bad_request( - transport: str = "rest", request_type=compute.GetXpnResourcesProjectsRequest +def test_move_instance_unary_rest_bad_request( + transport: str = "rest", request_type=compute.MoveInstanceProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2472,6 +5244,10 @@ def test_get_xpn_resources_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["instance_move_request_resource"] = { + "destination_zone": "destination_zone_value", + "target_instance": "target_instance_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2483,10 +5259,10 @@ def test_get_xpn_resources_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_xpn_resources(request) + client.move_instance_unary(request) -def test_get_xpn_resources_rest_flattened(): +def test_move_instance_unary_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2495,7 +5271,7 @@ def test_get_xpn_resources_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ProjectsGetXpnResources() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -2503,30 +5279,33 @@ def test_get_xpn_resources_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", + instance_move_request_resource=compute.InstanceMoveRequest( + destination_zone="destination_zone_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ProjectsGetXpnResources.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_xpn_resources(**mock_args) + client.move_instance_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/getXpnResources" % client.transport._host, + "%s/compute/v1/projects/{project}/moveInstance" % client.transport._host, args[1], ) -def test_get_xpn_resources_rest_flattened_error(transport: str = "rest"): +def test_move_instance_unary_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2535,81 +5314,29 @@ def test_get_xpn_resources_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_xpn_resources( - compute.GetXpnResourcesProjectsRequest(), + client.move_instance_unary( + compute.MoveInstanceProjectRequest(), project="project_value", + instance_move_request_resource=compute.InstanceMoveRequest( + destination_zone="destination_zone_value" + ), ) -def test_get_xpn_resources_rest_pager(transport: str = "rest"): +def test_move_instance_unary_rest_error(): client = ProjectsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ProjectsGetXpnResources( - resources=[ - compute.XpnResourceId(), - compute.XpnResourceId(), - compute.XpnResourceId(), - ], - next_page_token="abc", - ), - compute.ProjectsGetXpnResources( - resources=[], - next_page_token="def", - ), - compute.ProjectsGetXpnResources( - resources=[ - compute.XpnResourceId(), - ], - next_page_token="ghi", - ), - compute.ProjectsGetXpnResources( - resources=[ - compute.XpnResourceId(), - compute.XpnResourceId(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ProjectsGetXpnResources.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.get_xpn_resources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.XpnResourceId) for i in results) - - pages = list(client.get_xpn_resources(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListXpnHostsProjectsRequest, + compute.SetCommonInstanceMetadataProjectRequest, dict, ], ) -def test_list_xpn_hosts_rest(request_type): +def test_set_common_instance_metadata_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2617,39 +5344,77 @@ def test_list_xpn_hosts_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_list_xpn_hosts_request_resource"] = { - "organization": "organization_value" + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.XpnHostList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.XpnHostList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_xpn_hosts(request) + response = client.set_common_instance_metadata(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListXpnHostsPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_xpn_hosts_rest_required_fields( - request_type=compute.ListXpnHostsProjectsRequest, +def test_set_common_instance_metadata_rest_required_fields( + request_type=compute.SetCommonInstanceMetadataProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -2666,7 +5431,7 @@ def test_list_xpn_hosts_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_xpn_hosts._get_unset_required_fields(jsonified_request) + ).set_common_instance_metadata._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2675,17 +5440,9 @@ def test_list_xpn_hosts_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_xpn_hosts._get_unset_required_fields(jsonified_request) + ).set_common_instance_metadata._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2699,7 +5456,7 @@ def test_list_xpn_hosts_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.XpnHostList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2718,44 +5475,36 @@ def test_list_xpn_hosts_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.XpnHostList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_xpn_hosts(request) + response = client.set_common_instance_metadata(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_xpn_hosts_rest_unset_required_fields(): +def test_set_common_instance_metadata_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_xpn_hosts._get_unset_required_fields({}) + unset_fields = transport.set_common_instance_metadata._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "metadataResource", "project", - "projectsListXpnHostsRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_xpn_hosts_rest_interceptors(null_interceptor): +def test_set_common_instance_metadata_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -2766,9 +5515,9 @@ def test_list_xpn_hosts_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_list_xpn_hosts" + transports.ProjectsRestInterceptor, "post_set_common_instance_metadata" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_list_xpn_hosts" + transports.ProjectsRestInterceptor, "pre_set_common_instance_metadata" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2783,17 +5532,17 @@ def test_list_xpn_hosts_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.XpnHostList.to_json(compute.XpnHostList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListXpnHostsProjectsRequest() + request = compute.SetCommonInstanceMetadataProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.XpnHostList + post.return_value = compute.Operation - client.list_xpn_hosts( + client.set_common_instance_metadata( request, metadata=[ ("key", "val"), @@ -2805,8 +5554,9 @@ def test_list_xpn_hosts_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_xpn_hosts_rest_bad_request( - transport: str = "rest", request_type=compute.ListXpnHostsProjectsRequest +def test_set_common_instance_metadata_rest_bad_request( + transport: str = "rest", + request_type=compute.SetCommonInstanceMetadataProjectRequest, ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2815,8 +5565,10 @@ def test_list_xpn_hosts_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_list_xpn_hosts_request_resource"] = { - "organization": "organization_value" + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", } request = request_type(request_init) @@ -2829,10 +5581,10 @@ def test_list_xpn_hosts_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_xpn_hosts(request) + client.set_common_instance_metadata(request) -def test_list_xpn_hosts_rest_flattened(): +def test_set_common_instance_metadata_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2841,7 +5593,7 @@ def test_list_xpn_hosts_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.XpnHostList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -2849,33 +5601,32 @@ def test_list_xpn_hosts_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - projects_list_xpn_hosts_request_resource=compute.ProjectsListXpnHostsRequest( - organization="organization_value" - ), + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.XpnHostList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_xpn_hosts(**mock_args) + client.set_common_instance_metadata(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/listXpnHosts" % client.transport._host, + "%s/compute/v1/projects/{project}/setCommonInstanceMetadata" + % client.transport._host, args[1], ) -def test_list_xpn_hosts_rest_flattened_error(transport: str = "rest"): +def test_set_common_instance_metadata_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2884,87 +5635,27 @@ def test_list_xpn_hosts_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_xpn_hosts( - compute.ListXpnHostsProjectsRequest(), + client.set_common_instance_metadata( + compute.SetCommonInstanceMetadataProjectRequest(), project="project_value", - projects_list_xpn_hosts_request_resource=compute.ProjectsListXpnHostsRequest( - organization="organization_value" - ), + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), ) -def test_list_xpn_hosts_rest_pager(transport: str = "rest"): +def test_set_common_instance_metadata_rest_error(): client = ProjectsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.XpnHostList( - items=[ - compute.Project(), - compute.Project(), - compute.Project(), - ], - next_page_token="abc", - ), - compute.XpnHostList( - items=[], - next_page_token="def", - ), - compute.XpnHostList( - items=[ - compute.Project(), - ], - next_page_token="ghi", - ), - compute.XpnHostList( - items=[ - compute.Project(), - compute.Project(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.XpnHostList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - sample_request[ - "projects_list_xpn_hosts_request_resource" - ] = compute.ProjectsListXpnHostsRequest(organization="organization_value") - - pager = client.list_xpn_hosts(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Project) for i in results) - - pages = list(client.list_xpn_hosts(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.MoveDiskProjectRequest, + compute.SetCommonInstanceMetadataProjectRequest, dict, ], ) -def test_move_disk_unary_rest(request_type): +def test_set_common_instance_metadata_unary_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2972,9 +5663,10 @@ def test_move_disk_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["disk_move_request_resource"] = { - "destination_zone": "destination_zone_value", - "target_disk": "target_disk_value", + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", } request = request_type(request_init) @@ -3012,36 +5704,14 @@ def test_move_disk_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.move_disk_unary(request) + response = client.set_common_instance_metadata_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_move_disk_unary_rest_required_fields( - request_type=compute.MoveDiskProjectRequest, +def test_set_common_instance_metadata_unary_rest_required_fields( + request_type=compute.SetCommonInstanceMetadataProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -3058,7 +5728,7 @@ def test_move_disk_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).move_disk._get_unset_required_fields(jsonified_request) + ).set_common_instance_metadata._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3067,7 +5737,7 @@ def test_move_disk_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).move_disk._get_unset_required_fields(jsonified_request) + ).set_common_instance_metadata._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3106,24 +5776,24 @@ def test_move_disk_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.move_disk_unary(request) + response = client.set_common_instance_metadata_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_move_disk_unary_rest_unset_required_fields(): +def test_set_common_instance_metadata_unary_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.move_disk._get_unset_required_fields({}) + unset_fields = transport.set_common_instance_metadata._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "diskMoveRequestResource", + "metadataResource", "project", ) ) @@ -3131,7 +5801,7 @@ def test_move_disk_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_move_disk_unary_rest_interceptors(null_interceptor): +def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -3142,9 +5812,9 @@ def test_move_disk_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_move_disk" + transports.ProjectsRestInterceptor, "post_set_common_instance_metadata" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_move_disk" + transports.ProjectsRestInterceptor, "pre_set_common_instance_metadata" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3161,7 +5831,7 @@ def test_move_disk_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.MoveDiskProjectRequest() + request = compute.SetCommonInstanceMetadataProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3169,7 +5839,7 @@ def test_move_disk_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.move_disk_unary( + client.set_common_instance_metadata_unary( request, metadata=[ ("key", "val"), @@ -3181,8 +5851,9 @@ def test_move_disk_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_move_disk_unary_rest_bad_request( - transport: str = "rest", request_type=compute.MoveDiskProjectRequest +def test_set_common_instance_metadata_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetCommonInstanceMetadataProjectRequest, ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3191,9 +5862,10 @@ def test_move_disk_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["disk_move_request_resource"] = { - "destination_zone": "destination_zone_value", - "target_disk": "target_disk_value", + request_init["metadata_resource"] = { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", } request = request_type(request_init) @@ -3206,10 +5878,10 @@ def test_move_disk_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.move_disk_unary(request) + client.set_common_instance_metadata_unary(request) -def test_move_disk_unary_rest_flattened(): +def test_set_common_instance_metadata_unary_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3226,9 +5898,7 @@ def test_move_disk_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - disk_move_request_resource=compute.DiskMoveRequest( - destination_zone="destination_zone_value" - ), + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), ) mock_args.update(sample_request) @@ -3240,19 +5910,22 @@ def test_move_disk_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.move_disk_unary(**mock_args) + client.set_common_instance_metadata_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/moveDisk" % client.transport._host, + "%s/compute/v1/projects/{project}/setCommonInstanceMetadata" + % client.transport._host, args[1], ) -def test_move_disk_unary_rest_flattened_error(transport: str = "rest"): +def test_set_common_instance_metadata_unary_rest_flattened_error( + transport: str = "rest", +): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3260,17 +5933,15 @@ def test_move_disk_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. - with pytest.raises(ValueError): - client.move_disk_unary( - compute.MoveDiskProjectRequest(), + with pytest.raises(ValueError): + client.set_common_instance_metadata_unary( + compute.SetCommonInstanceMetadataProjectRequest(), project="project_value", - disk_move_request_resource=compute.DiskMoveRequest( - destination_zone="destination_zone_value" - ), + metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), ) -def test_move_disk_unary_rest_error(): +def test_set_common_instance_metadata_unary_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3279,11 +5950,11 @@ def test_move_disk_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.MoveInstanceProjectRequest, + compute.SetDefaultNetworkTierProjectRequest, dict, ], ) -def test_move_instance_unary_rest(request_type): +def test_set_default_network_tier_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3291,9 +5962,8 @@ def test_move_instance_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["instance_move_request_resource"] = { - "destination_zone": "destination_zone_value", - "target_instance": "target_instance_value", + request_init["projects_set_default_network_tier_request_resource"] = { + "network_tier": "network_tier_value" } request = request_type(request_init) @@ -3331,10 +6001,10 @@ def test_move_instance_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.move_instance_unary(request) + response = client.set_default_network_tier(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3359,8 +6029,8 @@ def test_move_instance_unary_rest(request_type): assert response.zone == "zone_value" -def test_move_instance_unary_rest_required_fields( - request_type=compute.MoveInstanceProjectRequest, +def test_set_default_network_tier_rest_required_fields( + request_type=compute.SetDefaultNetworkTierProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -3377,7 +6047,7 @@ def test_move_instance_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).move_instance._get_unset_required_fields(jsonified_request) + ).set_default_network_tier._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3386,7 +6056,7 @@ def test_move_instance_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).move_instance._get_unset_required_fields(jsonified_request) + ).set_default_network_tier._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3425,32 +6095,32 @@ def test_move_instance_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.move_instance_unary(request) + response = client.set_default_network_tier(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_move_instance_unary_rest_unset_required_fields(): +def test_set_default_network_tier_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.move_instance._get_unset_required_fields({}) + unset_fields = transport.set_default_network_tier._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "instanceMoveRequestResource", "project", + "projectsSetDefaultNetworkTierRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_move_instance_unary_rest_interceptors(null_interceptor): +def test_set_default_network_tier_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -3461,9 +6131,9 @@ def test_move_instance_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_move_instance" + transports.ProjectsRestInterceptor, "post_set_default_network_tier" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_move_instance" + transports.ProjectsRestInterceptor, "pre_set_default_network_tier" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3480,7 +6150,7 @@ def test_move_instance_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.MoveInstanceProjectRequest() + request = compute.SetDefaultNetworkTierProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3488,7 +6158,7 @@ def test_move_instance_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.move_instance_unary( + client.set_default_network_tier( request, metadata=[ ("key", "val"), @@ -3500,8 +6170,8 @@ def test_move_instance_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_move_instance_unary_rest_bad_request( - transport: str = "rest", request_type=compute.MoveInstanceProjectRequest +def test_set_default_network_tier_rest_bad_request( + transport: str = "rest", request_type=compute.SetDefaultNetworkTierProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3510,9 +6180,8 @@ def test_move_instance_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["instance_move_request_resource"] = { - "destination_zone": "destination_zone_value", - "target_instance": "target_instance_value", + request_init["projects_set_default_network_tier_request_resource"] = { + "network_tier": "network_tier_value" } request = request_type(request_init) @@ -3525,10 +6194,10 @@ def test_move_instance_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.move_instance_unary(request) + client.set_default_network_tier(request) -def test_move_instance_unary_rest_flattened(): +def test_set_default_network_tier_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3545,8 +6214,8 @@ def test_move_instance_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - instance_move_request_resource=compute.InstanceMoveRequest( - destination_zone="destination_zone_value" + projects_set_default_network_tier_request_resource=compute.ProjectsSetDefaultNetworkTierRequest( + network_tier="network_tier_value" ), ) mock_args.update(sample_request) @@ -3559,19 +6228,20 @@ def test_move_instance_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.move_instance_unary(**mock_args) + client.set_default_network_tier(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/moveInstance" % client.transport._host, + "%s/compute/v1/projects/{project}/setDefaultNetworkTier" + % client.transport._host, args[1], ) -def test_move_instance_unary_rest_flattened_error(transport: str = "rest"): +def test_set_default_network_tier_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3580,16 +6250,16 @@ def test_move_instance_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.move_instance_unary( - compute.MoveInstanceProjectRequest(), + client.set_default_network_tier( + compute.SetDefaultNetworkTierProjectRequest(), project="project_value", - instance_move_request_resource=compute.InstanceMoveRequest( - destination_zone="destination_zone_value" + projects_set_default_network_tier_request_resource=compute.ProjectsSetDefaultNetworkTierRequest( + network_tier="network_tier_value" ), ) -def test_move_instance_unary_rest_error(): +def test_set_default_network_tier_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3598,11 +6268,11 @@ def test_move_instance_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetCommonInstanceMetadataProjectRequest, + compute.SetDefaultNetworkTierProjectRequest, dict, ], ) -def test_set_common_instance_metadata_unary_rest(request_type): +def test_set_default_network_tier_unary_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3610,10 +6280,8 @@ def test_set_common_instance_metadata_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["metadata_resource"] = { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", + request_init["projects_set_default_network_tier_request_resource"] = { + "network_tier": "network_tier_value" } request = request_type(request_init) @@ -3651,36 +6319,14 @@ def test_set_common_instance_metadata_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_common_instance_metadata_unary(request) + response = client.set_default_network_tier_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_common_instance_metadata_unary_rest_required_fields( - request_type=compute.SetCommonInstanceMetadataProjectRequest, +def test_set_default_network_tier_unary_rest_required_fields( + request_type=compute.SetDefaultNetworkTierProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -3697,7 +6343,7 @@ def test_set_common_instance_metadata_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_common_instance_metadata._get_unset_required_fields(jsonified_request) + ).set_default_network_tier._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3706,7 +6352,7 @@ def test_set_common_instance_metadata_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_common_instance_metadata._get_unset_required_fields(jsonified_request) + ).set_default_network_tier._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3745,32 +6391,32 @@ def test_set_common_instance_metadata_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_common_instance_metadata_unary(request) + response = client.set_default_network_tier_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_common_instance_metadata_unary_rest_unset_required_fields(): +def test_set_default_network_tier_unary_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_common_instance_metadata._get_unset_required_fields({}) + unset_fields = transport.set_default_network_tier._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "metadataResource", "project", + "projectsSetDefaultNetworkTierRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): +def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -3781,9 +6427,9 @@ def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_set_common_instance_metadata" + transports.ProjectsRestInterceptor, "post_set_default_network_tier" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_set_common_instance_metadata" + transports.ProjectsRestInterceptor, "pre_set_default_network_tier" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3800,7 +6446,7 @@ def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetCommonInstanceMetadataProjectRequest() + request = compute.SetDefaultNetworkTierProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3808,7 +6454,7 @@ def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_common_instance_metadata_unary( + client.set_default_network_tier_unary( request, metadata=[ ("key", "val"), @@ -3820,9 +6466,8 @@ def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_common_instance_metadata_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetCommonInstanceMetadataProjectRequest, +def test_set_default_network_tier_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetDefaultNetworkTierProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3831,10 +6476,8 @@ def test_set_common_instance_metadata_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["metadata_resource"] = { - "fingerprint": "fingerprint_value", - "items": [{"key": "key_value", "value": "value_value"}], - "kind": "kind_value", + request_init["projects_set_default_network_tier_request_resource"] = { + "network_tier": "network_tier_value" } request = request_type(request_init) @@ -3847,10 +6490,10 @@ def test_set_common_instance_metadata_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_common_instance_metadata_unary(request) + client.set_default_network_tier_unary(request) -def test_set_common_instance_metadata_unary_rest_flattened(): +def test_set_default_network_tier_unary_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3867,7 +6510,9 @@ def test_set_common_instance_metadata_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + projects_set_default_network_tier_request_resource=compute.ProjectsSetDefaultNetworkTierRequest( + network_tier="network_tier_value" + ), ) mock_args.update(sample_request) @@ -3879,22 +6524,20 @@ def test_set_common_instance_metadata_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_common_instance_metadata_unary(**mock_args) + client.set_default_network_tier_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/setCommonInstanceMetadata" + "%s/compute/v1/projects/{project}/setDefaultNetworkTier" % client.transport._host, args[1], ) -def test_set_common_instance_metadata_unary_rest_flattened_error( - transport: str = "rest", -): +def test_set_default_network_tier_unary_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3903,14 +6546,16 @@ def test_set_common_instance_metadata_unary_rest_flattened_error( # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_common_instance_metadata_unary( - compute.SetCommonInstanceMetadataProjectRequest(), + client.set_default_network_tier_unary( + compute.SetDefaultNetworkTierProjectRequest(), project="project_value", - metadata_resource=compute.Metadata(fingerprint="fingerprint_value"), + projects_set_default_network_tier_request_resource=compute.ProjectsSetDefaultNetworkTierRequest( + network_tier="network_tier_value" + ), ) -def test_set_common_instance_metadata_unary_rest_error(): +def test_set_default_network_tier_unary_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3919,11 +6564,11 @@ def test_set_common_instance_metadata_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetDefaultNetworkTierProjectRequest, + compute.SetUsageExportBucketProjectRequest, dict, ], ) -def test_set_default_network_tier_unary_rest(request_type): +def test_set_usage_export_bucket_rest(request_type): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3931,8 +6576,9 @@ def test_set_default_network_tier_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_set_default_network_tier_request_resource"] = { - "network_tier": "network_tier_value" + request_init["usage_export_location_resource"] = { + "bucket_name": "bucket_name_value", + "report_name_prefix": "report_name_prefix_value", } request = request_type(request_init) @@ -3970,10 +6616,10 @@ def test_set_default_network_tier_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_default_network_tier_unary(request) + response = client.set_usage_export_bucket(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3998,8 +6644,8 @@ def test_set_default_network_tier_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_default_network_tier_unary_rest_required_fields( - request_type=compute.SetDefaultNetworkTierProjectRequest, +def test_set_usage_export_bucket_rest_required_fields( + request_type=compute.SetUsageExportBucketProjectRequest, ): transport_class = transports.ProjectsRestTransport @@ -4016,7 +6662,7 @@ def test_set_default_network_tier_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_default_network_tier._get_unset_required_fields(jsonified_request) + ).set_usage_export_bucket._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4025,7 +6671,7 @@ def test_set_default_network_tier_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_default_network_tier._get_unset_required_fields(jsonified_request) + ).set_usage_export_bucket._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -4064,32 +6710,32 @@ def test_set_default_network_tier_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_default_network_tier_unary(request) + response = client.set_usage_export_bucket(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_default_network_tier_unary_rest_unset_required_fields(): +def test_set_usage_export_bucket_rest_unset_required_fields(): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_default_network_tier._get_unset_required_fields({}) + unset_fields = transport.set_usage_export_bucket._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "projectsSetDefaultNetworkTierRequestResource", + "usageExportLocationResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): +def test_set_usage_export_bucket_rest_interceptors(null_interceptor): transport = transports.ProjectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.ProjectsRestInterceptor(), @@ -4100,9 +6746,9 @@ def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ProjectsRestInterceptor, "post_set_default_network_tier" + transports.ProjectsRestInterceptor, "post_set_usage_export_bucket" ) as post, mock.patch.object( - transports.ProjectsRestInterceptor, "pre_set_default_network_tier" + transports.ProjectsRestInterceptor, "pre_set_usage_export_bucket" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4119,7 +6765,7 @@ def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetDefaultNetworkTierProjectRequest() + request = compute.SetUsageExportBucketProjectRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4127,7 +6773,7 @@ def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_default_network_tier_unary( + client.set_usage_export_bucket( request, metadata=[ ("key", "val"), @@ -4139,8 +6785,8 @@ def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_default_network_tier_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetDefaultNetworkTierProjectRequest +def test_set_usage_export_bucket_rest_bad_request( + transport: str = "rest", request_type=compute.SetUsageExportBucketProjectRequest ): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4149,8 +6795,9 @@ def test_set_default_network_tier_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request_init["projects_set_default_network_tier_request_resource"] = { - "network_tier": "network_tier_value" + request_init["usage_export_location_resource"] = { + "bucket_name": "bucket_name_value", + "report_name_prefix": "report_name_prefix_value", } request = request_type(request_init) @@ -4163,10 +6810,10 @@ def test_set_default_network_tier_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_default_network_tier_unary(request) + client.set_usage_export_bucket(request) -def test_set_default_network_tier_unary_rest_flattened(): +def test_set_usage_export_bucket_rest_flattened(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4183,8 +6830,8 @@ def test_set_default_network_tier_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - projects_set_default_network_tier_request_resource=compute.ProjectsSetDefaultNetworkTierRequest( - network_tier="network_tier_value" + usage_export_location_resource=compute.UsageExportLocation( + bucket_name="bucket_name_value" ), ) mock_args.update(sample_request) @@ -4197,20 +6844,20 @@ def test_set_default_network_tier_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_default_network_tier_unary(**mock_args) + client.set_usage_export_bucket(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/setDefaultNetworkTier" + "%s/compute/v1/projects/{project}/setUsageExportBucket" % client.transport._host, args[1], ) -def test_set_default_network_tier_unary_rest_flattened_error(transport: str = "rest"): +def test_set_usage_export_bucket_rest_flattened_error(transport: str = "rest"): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4219,16 +6866,16 @@ def test_set_default_network_tier_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_default_network_tier_unary( - compute.SetDefaultNetworkTierProjectRequest(), + client.set_usage_export_bucket( + compute.SetUsageExportBucketProjectRequest(), project="project_value", - projects_set_default_network_tier_request_resource=compute.ProjectsSetDefaultNetworkTierRequest( - network_tier="network_tier_value" + usage_export_location_resource=compute.UsageExportLocation( + bucket_name="bucket_name_value" ), ) -def test_set_default_network_tier_unary_rest_error(): +def test_set_usage_export_bucket_rest_error(): client = ProjectsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4293,28 +6940,6 @@ def test_set_usage_export_bucket_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_usage_export_bucket_unary_rest_required_fields( @@ -4629,6 +7254,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ProjectsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_projects_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4672,6 +7310,14 @@ def test_projects_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_projects_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_public_advertised_prefixes.py b/tests/unit/gapic/compute_v1/test_public_advertised_prefixes.py index 5c4a90d50..a6bb7f71c 100644 --- a/tests/unit/gapic/compute_v1/test_public_advertised_prefixes.py +++ b/tests/unit/gapic/compute_v1/test_public_advertised_prefixes.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -561,7 +563,7 @@ def test_public_advertised_prefixes_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -605,10 +607,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -633,7 +635,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeletePublicAdvertisedPrefixeRequest, ): transport_class = transports.PublicAdvertisedPrefixesRestTransport @@ -704,14 +706,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -729,7 +731,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -769,7 +771,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -781,7 +783,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeletePublicAdvertisedPrefixeRequest ): client = PublicAdvertisedPrefixesClient( @@ -802,10 +804,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -834,7 +836,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -847,7 +849,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -856,14 +858,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeletePublicAdvertisedPrefixeRequest(), project="project_value", public_advertised_prefix="public_advertised_prefix_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -872,11 +874,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetPublicAdvertisedPrefixeRequest, + compute.DeletePublicAdvertisedPrefixeRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -889,45 +891,45 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicAdvertisedPrefix( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - dns_verification_ip="dns_verification_ip_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_cidr_range="ip_cidr_range_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - shared_secret="shared_secret_value", - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicAdvertisedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.PublicAdvertisedPrefix) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.dns_verification_ip == "dns_verification_ip_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.ip_cidr_range == "ip_cidr_range_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.self_link == "self_link_value" - assert response.shared_secret == "shared_secret_value" - assert response.status == "status_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetPublicAdvertisedPrefixeRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeletePublicAdvertisedPrefixeRequest, ): transport_class = transports.PublicAdvertisedPrefixesRestTransport @@ -945,7 +947,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -955,7 +957,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -973,7 +977,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PublicAdvertisedPrefix() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -984,32 +988,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicAdvertisedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1020,7 +1024,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1033,9 +1037,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PublicAdvertisedPrefixesRestInterceptor, "post_get" + transports.PublicAdvertisedPrefixesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.PublicAdvertisedPrefixesRestInterceptor, "pre_get" + transports.PublicAdvertisedPrefixesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1050,19 +1054,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PublicAdvertisedPrefix.to_json( - compute.PublicAdvertisedPrefix() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetPublicAdvertisedPrefixeRequest() + request = compute.DeletePublicAdvertisedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicAdvertisedPrefix + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1074,8 +1076,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetPublicAdvertisedPrefixeRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeletePublicAdvertisedPrefixeRequest ): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1095,10 +1097,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1107,7 +1109,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicAdvertisedPrefix() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "public_advertised_prefix": "sample2"} @@ -1122,12 +1124,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicAdvertisedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1140,7 +1142,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1149,14 +1151,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetPublicAdvertisedPrefixeRequest(), + client.delete_unary( + compute.DeletePublicAdvertisedPrefixeRequest(), project="project_value", public_advertised_prefix="public_advertised_prefix_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1165,111 +1167,68 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertPublicAdvertisedPrefixeRequest, + compute.GetPublicAdvertisedPrefixeRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["public_advertised_prefix_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "dns_verification_ip": "dns_verification_ip_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_cidr_range": "ip_cidr_range_value", - "kind": "kind_value", - "name": "name_value", - "public_delegated_prefixs": [ - { - "ip_range": "ip_range_value", - "name": "name_value", - "project": "project_value", - "region": "region_value", - "status": "status_value", - } - ], - "self_link": "self_link_value", - "shared_secret": "shared_secret_value", - "status": "status_value", - } + request_init = {"project": "sample1", "public_advertised_prefix": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.PublicAdvertisedPrefix( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + dns_verification_ip="dns_verification_ip_value", + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + ip_cidr_range="ip_cidr_range_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + shared_secret="shared_secret_value", + status="status_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicAdvertisedPrefix.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.PublicAdvertisedPrefix) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.dns_verification_ip == "dns_verification_ip_value" + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.ip_cidr_range == "ip_cidr_range_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.shared_secret == "shared_secret_value" + assert response.status == "status_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertPublicAdvertisedPrefixeRequest, +def test_get_rest_required_fields( + request_type=compute.GetPublicAdvertisedPrefixeRequest, ): transport_class = transports.PublicAdvertisedPrefixesRestTransport request_init = {} request_init["project"] = "" + request_init["public_advertised_prefix"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1281,23 +1240,26 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["publicAdvertisedPrefix"] = "public_advertised_prefix_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "publicAdvertisedPrefix" in jsonified_request + assert ( + jsonified_request["publicAdvertisedPrefix"] == "public_advertised_prefix_value" + ) client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1306,7 +1268,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PublicAdvertisedPrefix() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1317,44 +1279,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicAdvertisedPrefix.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "publicAdvertisedPrefixResource", + "publicAdvertisedPrefix", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1367,9 +1328,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PublicAdvertisedPrefixesRestInterceptor, "post_insert" + transports.PublicAdvertisedPrefixesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.PublicAdvertisedPrefixesRestInterceptor, "pre_insert" + transports.PublicAdvertisedPrefixesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1384,17 +1345,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.PublicAdvertisedPrefix.to_json( + compute.PublicAdvertisedPrefix() + ) - request = compute.InsertPublicAdvertisedPrefixeRequest() + request = compute.GetPublicAdvertisedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.PublicAdvertisedPrefix - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1406,8 +1369,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertPublicAdvertisedPrefixeRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetPublicAdvertisedPrefixeRequest ): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1415,10 +1378,678 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["public_advertised_prefix_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", + request_init = {"project": "sample1", "public_advertised_prefix": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PublicAdvertisedPrefix() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "public_advertised_prefix": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + public_advertised_prefix="public_advertised_prefix_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicAdvertisedPrefix.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/publicAdvertisedPrefixes/{public_advertised_prefix}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetPublicAdvertisedPrefixeRequest(), + project="project_value", + public_advertised_prefix="public_advertised_prefix_value", + ) + + +def test_get_rest_error(): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertPublicAdvertisedPrefixeRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_advertised_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dns_verification_ip": "dns_verification_ip_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "kind": "kind_value", + "name": "name_value", + "public_delegated_prefixs": [ + { + "ip_range": "ip_range_value", + "name": "name_value", + "project": "project_value", + "region": "region_value", + "status": "status_value", + } + ], + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertPublicAdvertisedPrefixeRequest, +): + transport_class = transports.PublicAdvertisedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.PublicAdvertisedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "publicAdvertisedPrefixResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.PublicAdvertisedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PublicAdvertisedPrefixesRestInterceptor(), + ) + client = PublicAdvertisedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PublicAdvertisedPrefixesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.PublicAdvertisedPrefixesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertPublicAdvertisedPrefixeRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertPublicAdvertisedPrefixeRequest +): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_advertised_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dns_verification_ip": "dns_verification_ip_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "kind": "kind_value", + "name": "name_value", + "public_delegated_prefixs": [ + { + "ip_range": "ip_range_value", + "name": "name_value", + "project": "project_value", + "region": "region_value", + "status": "status_value", + } + ], + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/publicAdvertisedPrefixes" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertPublicAdvertisedPrefixeRequest(), + project="project_value", + public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertPublicAdvertisedPrefixeRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_advertised_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dns_verification_ip": "dns_verification_ip_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "kind": "kind_value", + "name": "name_value", + "public_delegated_prefixs": [ + { + "ip_range": "ip_range_value", + "name": "name_value", + "project": "project_value", + "region": "region_value", + "status": "status_value", + } + ], + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertPublicAdvertisedPrefixeRequest, +): + transport_class = transports.PublicAdvertisedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.PublicAdvertisedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "publicAdvertisedPrefixResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.PublicAdvertisedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PublicAdvertisedPrefixesRestInterceptor(), + ) + client = PublicAdvertisedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PublicAdvertisedPrefixesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.PublicAdvertisedPrefixesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertPublicAdvertisedPrefixeRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertPublicAdvertisedPrefixeRequest +): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["public_advertised_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", "dns_verification_ip": "dns_verification_ip_value", "fingerprint": "fingerprint_value", "id": 205, @@ -1433,11 +2064,301 @@ def test_insert_unary_rest_bad_request( "region": "region_value", "status": "status_value", } - ], - "self_link": "self_link_value", - "shared_secret": "shared_secret_value", - "status": "status_value", - } + ], + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/publicAdvertisedPrefixes" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertPublicAdvertisedPrefixeRequest(), + project="project_value", + public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPublicAdvertisedPrefixesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PublicAdvertisedPrefixList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicAdvertisedPrefixList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListPublicAdvertisedPrefixesRequest, +): + transport_class = transports.PublicAdvertisedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.PublicAdvertisedPrefixList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicAdvertisedPrefixList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.PublicAdvertisedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.PublicAdvertisedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PublicAdvertisedPrefixesRestInterceptor(), + ) + client = PublicAdvertisedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PublicAdvertisedPrefixesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.PublicAdvertisedPrefixesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.PublicAdvertisedPrefixList.to_json( + compute.PublicAdvertisedPrefixList() + ) + + request = compute.ListPublicAdvertisedPrefixesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.PublicAdvertisedPrefixList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListPublicAdvertisedPrefixesRequest +): + client = PublicAdvertisedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1449,10 +2370,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.list(request) -def test_insert_unary_rest_flattened(): +def test_list_rest_flattened(): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1461,7 +2382,7 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PublicAdvertisedPrefixList() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1469,21 +2390,18 @@ def test_insert_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( - creation_timestamp="creation_timestamp_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicAdvertisedPrefixList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1496,7 +2414,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1505,71 +2423,184 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertPublicAdvertisedPrefixeRequest(), + client.list( + compute.ListPublicAdvertisedPrefixesRequest(), project="project_value", - public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( - creation_timestamp="creation_timestamp_value" - ), ) -def test_insert_unary_rest_error(): +def test_list_rest_pager(transport: str = "rest"): client = PublicAdvertisedPrefixesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.PublicAdvertisedPrefixList( + items=[ + compute.PublicAdvertisedPrefix(), + compute.PublicAdvertisedPrefix(), + compute.PublicAdvertisedPrefix(), + ], + next_page_token="abc", + ), + compute.PublicAdvertisedPrefixList( + items=[], + next_page_token="def", + ), + compute.PublicAdvertisedPrefixList( + items=[ + compute.PublicAdvertisedPrefix(), + ], + next_page_token="ghi", + ), + compute.PublicAdvertisedPrefixList( + items=[ + compute.PublicAdvertisedPrefix(), + compute.PublicAdvertisedPrefix(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.PublicAdvertisedPrefixList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.PublicAdvertisedPrefix) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.ListPublicAdvertisedPrefixesRequest, + compute.PatchPublicAdvertisedPrefixeRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_rest(request_type): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "public_advertised_prefix": "sample2"} + request_init["public_advertised_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dns_verification_ip": "dns_verification_ip_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "kind": "kind_value", + "name": "name_value", + "public_delegated_prefixs": [ + { + "ip_range": "ip_range_value", + "name": "name_value", + "project": "project_value", + "region": "region_value", + "status": "status_value", + } + ], + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicAdvertisedPrefixList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicAdvertisedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListPublicAdvertisedPrefixesRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchPublicAdvertisedPrefixeRequest, ): transport_class = transports.PublicAdvertisedPrefixesRestTransport request_init = {} request_init["project"] = "" + request_init["public_advertised_prefix"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1581,31 +2612,28 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["publicAdvertisedPrefix"] = "public_advertised_prefix_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "publicAdvertisedPrefix" in jsonified_request + assert ( + jsonified_request["publicAdvertisedPrefix"] == "public_advertised_prefix_value" + ) client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1614,7 +2642,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PublicAdvertisedPrefixList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1625,46 +2653,45 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicAdvertisedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "publicAdvertisedPrefix", + "publicAdvertisedPrefixResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.PublicAdvertisedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1677,9 +2704,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PublicAdvertisedPrefixesRestInterceptor, "post_list" + transports.PublicAdvertisedPrefixesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.PublicAdvertisedPrefixesRestInterceptor, "pre_list" + transports.PublicAdvertisedPrefixesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1694,19 +2721,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PublicAdvertisedPrefixList.to_json( - compute.PublicAdvertisedPrefixList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPublicAdvertisedPrefixesRequest() + request = compute.PatchPublicAdvertisedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicAdvertisedPrefixList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -1718,8 +2743,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListPublicAdvertisedPrefixesRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchPublicAdvertisedPrefixeRequest ): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1727,7 +2752,29 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "public_advertised_prefix": "sample2"} + request_init["public_advertised_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dns_verification_ip": "dns_verification_ip_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "kind": "kind_value", + "name": "name_value", + "public_delegated_prefixs": [ + { + "ip_range": "ip_range_value", + "name": "name_value", + "project": "project_value", + "region": "region_value", + "status": "status_value", + } + ], + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1739,10 +2786,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1751,39 +2798,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicAdvertisedPrefixList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "public_advertised_prefix": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + public_advertised_prefix="public_advertised_prefix_value", + public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicAdvertisedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/publicAdvertisedPrefixes" + "%s/compute/v1/projects/{project}/global/publicAdvertisedPrefixes/{public_advertised_prefix}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = PublicAdvertisedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1792,74 +2843,21 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListPublicAdvertisedPrefixesRequest(), + client.patch( + compute.PatchPublicAdvertisedPrefixeRequest(), project="project_value", + public_advertised_prefix="public_advertised_prefix_value", + public_advertised_prefix_resource=compute.PublicAdvertisedPrefix( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = PublicAdvertisedPrefixesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.PublicAdvertisedPrefixList( - items=[ - compute.PublicAdvertisedPrefix(), - compute.PublicAdvertisedPrefix(), - compute.PublicAdvertisedPrefix(), - ], - next_page_token="abc", - ), - compute.PublicAdvertisedPrefixList( - items=[], - next_page_token="def", - ), - compute.PublicAdvertisedPrefixList( - items=[ - compute.PublicAdvertisedPrefix(), - ], - next_page_token="ghi", - ), - compute.PublicAdvertisedPrefixList( - items=[ - compute.PublicAdvertisedPrefix(), - compute.PublicAdvertisedPrefix(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.PublicAdvertisedPrefixList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.PublicAdvertisedPrefix) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -1938,28 +2936,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2303,6 +3279,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = PublicAdvertisedPrefixesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_public_advertised_prefixes_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2338,6 +3327,14 @@ def test_public_advertised_prefixes_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_public_advertised_prefixes_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_public_delegated_prefixes.py b/tests/unit/gapic/compute_v1/test_public_delegated_prefixes.py index 24808c89e..466c827b8 100644 --- a/tests/unit/gapic/compute_v1/test_public_delegated_prefixes.py +++ b/tests/unit/gapic/compute_v1/test_public_delegated_prefixes.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -921,7 +923,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -969,10 +971,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -997,7 +999,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeletePublicDelegatedPrefixeRequest, ): transport_class = transports.PublicDelegatedPrefixesRestTransport @@ -1070,14 +1072,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1096,7 +1098,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1136,7 +1138,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1148,7 +1150,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeletePublicDelegatedPrefixeRequest ): client = PublicDelegatedPrefixesClient( @@ -1173,10 +1175,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1210,7 +1212,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1223,7 +1225,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1232,7 +1234,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeletePublicDelegatedPrefixeRequest(), project="project_value", region="region_value", @@ -1240,7 +1242,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1249,11 +1251,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetPublicDelegatedPrefixeRequest, + compute.DeletePublicDelegatedPrefixeRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1270,47 +1272,45 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefix( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ip_cidr_range="ip_cidr_range_value", - is_live_migration=True, + insert_time="insert_time_value", kind="kind_value", name="name_value", - parent_prefix="parent_prefix_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.PublicDelegatedPrefix) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.ip_cidr_range == "ip_cidr_range_value" - assert response.is_live_migration is True - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.parent_prefix == "parent_prefix_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.status == "status_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetPublicDelegatedPrefixeRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeletePublicDelegatedPrefixeRequest, ): transport_class = transports.PublicDelegatedPrefixesRestTransport @@ -1329,7 +1329,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1340,7 +1340,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1358,7 +1360,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefix() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1369,32 +1371,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1406,7 +1408,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1419,9 +1421,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PublicDelegatedPrefixesRestInterceptor, "post_get" + transports.PublicDelegatedPrefixesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.PublicDelegatedPrefixesRestInterceptor, "pre_get" + transports.PublicDelegatedPrefixesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1436,19 +1438,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PublicDelegatedPrefix.to_json( - compute.PublicDelegatedPrefix() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetPublicDelegatedPrefixeRequest() + request = compute.DeletePublicDelegatedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefix + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1460,8 +1460,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetPublicDelegatedPrefixeRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeletePublicDelegatedPrefixeRequest ): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1485,10 +1485,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1497,7 +1497,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefix() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1517,12 +1517,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1535,7 +1535,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1544,15 +1544,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetPublicDelegatedPrefixeRequest(), + client.delete_unary( + compute.DeletePublicDelegatedPrefixeRequest(), project="project_value", region="region_value", public_delegated_prefix="public_delegated_prefix_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1561,114 +1561,74 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertPublicDelegatedPrefixeRequest, + compute.GetPublicDelegatedPrefixeRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["public_delegated_prefix_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "ip_cidr_range": "ip_cidr_range_value", - "is_live_migration": True, - "kind": "kind_value", - "name": "name_value", - "parent_prefix": "parent_prefix_value", - "public_delegated_sub_prefixs": [ - { - "delegatee_project": "delegatee_project_value", - "description": "description_value", - "ip_cidr_range": "ip_cidr_range_value", - "is_address": True, - "name": "name_value", - "region": "region_value", - "status": "status_value", - } - ], - "region": "region_value", - "self_link": "self_link_value", - "status": "status_value", + request_init = { + "project": "sample1", + "region": "sample2", + "public_delegated_prefix": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.PublicDelegatedPrefix( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + ip_cidr_range="ip_cidr_range_value", + is_live_migration=True, kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + parent_prefix="parent_prefix_value", region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + status="status_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.PublicDelegatedPrefix) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.ip_cidr_range == "ip_cidr_range_value" + assert response.is_live_migration is True assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.parent_prefix == "parent_prefix_value" assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.status == "status_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertPublicDelegatedPrefixeRequest, +def test_get_rest_required_fields( + request_type=compute.GetPublicDelegatedPrefixeRequest, ): transport_class = transports.PublicDelegatedPrefixesRestTransport request_init = {} request_init["project"] = "" + request_init["public_delegated_prefix"] = "" request_init["region"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1681,24 +1641,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["publicDelegatedPrefix"] = "public_delegated_prefix_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "publicDelegatedPrefix" in jsonified_request + assert jsonified_request["publicDelegatedPrefix"] == "public_delegated_prefix_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" @@ -1709,7 +1670,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PublicDelegatedPrefix() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1720,37 +1681,36 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "publicDelegatedPrefixResource", + "publicDelegatedPrefix", "region", ) ) @@ -1758,7 +1718,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1771,9 +1731,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PublicDelegatedPrefixesRestInterceptor, "post_insert" + transports.PublicDelegatedPrefixesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.PublicDelegatedPrefixesRestInterceptor, "pre_insert" + transports.PublicDelegatedPrefixesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1788,17 +1748,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.PublicDelegatedPrefix.to_json( + compute.PublicDelegatedPrefix() + ) - request = compute.InsertPublicDelegatedPrefixeRequest() + request = compute.GetPublicDelegatedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.PublicDelegatedPrefix - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1810,8 +1772,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertPublicDelegatedPrefixeRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetPublicDelegatedPrefixeRequest ): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1819,9 +1781,708 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["public_delegated_prefix_resource"] = { - "creation_timestamp": "creation_timestamp_value", + request_init = { + "project": "sample1", + "region": "sample2", + "public_delegated_prefix": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PublicDelegatedPrefix() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "public_delegated_prefix": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + public_delegated_prefix="public_delegated_prefix_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicDelegatedPrefix.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/publicDelegatedPrefixes/{public_delegated_prefix}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetPublicDelegatedPrefixeRequest(), + project="project_value", + region="region_value", + public_delegated_prefix="public_delegated_prefix_value", + ) + + +def test_get_rest_error(): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertPublicDelegatedPrefixeRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertPublicDelegatedPrefixeRequest, +): + transport_class = transports.PublicDelegatedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.PublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "publicDelegatedPrefixResource", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.PublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PublicDelegatedPrefixesRestInterceptor(), + ) + client = PublicDelegatedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PublicDelegatedPrefixesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.PublicDelegatedPrefixesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertPublicDelegatedPrefixeRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertPublicDelegatedPrefixeRequest +): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/publicDelegatedPrefixes" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertPublicDelegatedPrefixeRequest(), + project="project_value", + region="region_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertPublicDelegatedPrefixeRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertPublicDelegatedPrefixeRequest, +): + transport_class = transports.PublicDelegatedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.PublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "publicDelegatedPrefixResource", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.PublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PublicDelegatedPrefixesRestInterceptor(), + ) + client = PublicDelegatedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PublicDelegatedPrefixesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.PublicDelegatedPrefixesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertPublicDelegatedPrefixeRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertPublicDelegatedPrefixeRequest +): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", "description": "description_value", "fingerprint": "fingerprint_value", "id": 205, @@ -1840,11 +2501,312 @@ def test_insert_unary_rest_bad_request( "region": "region_value", "status": "status_value", } - ], - "region": "region_value", - "self_link": "self_link_value", - "status": "status_value", - } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/publicDelegatedPrefixes" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertPublicDelegatedPrefixeRequest(), + project="project_value", + region="region_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPublicDelegatedPrefixesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.PublicDelegatedPrefixList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListPublicDelegatedPrefixesRequest, +): + transport_class = transports.PublicDelegatedPrefixesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.PublicDelegatedPrefixList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.PublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.PublicDelegatedPrefixesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.PublicDelegatedPrefixesRestInterceptor(), + ) + client = PublicDelegatedPrefixesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.PublicDelegatedPrefixesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.PublicDelegatedPrefixesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.PublicDelegatedPrefixList.to_json( + compute.PublicDelegatedPrefixList() + ) + + request = compute.ListPublicDelegatedPrefixesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.PublicDelegatedPrefixList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListPublicDelegatedPrefixesRequest +): + client = PublicDelegatedPrefixesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1856,10 +2818,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.list(request) -def test_insert_unary_rest_flattened(): +def test_list_rest_flattened(): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1868,7 +2830,7 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.PublicDelegatedPrefixList() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -1877,21 +2839,18 @@ def test_insert_unary_rest_flattened(): mock_args = dict( project="project_value", region="region_value", - public_delegated_prefix_resource=compute.PublicDelegatedPrefix( - creation_timestamp="creation_timestamp_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1904,7 +2863,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1913,72 +2872,190 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertPublicDelegatedPrefixeRequest(), + client.list( + compute.ListPublicDelegatedPrefixesRequest(), project="project_value", region="region_value", - public_delegated_prefix_resource=compute.PublicDelegatedPrefix( - creation_timestamp="creation_timestamp_value" - ), ) -def test_insert_unary_rest_error(): +def test_list_rest_pager(transport: str = "rest"): client = PublicDelegatedPrefixesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.PublicDelegatedPrefixList( + items=[ + compute.PublicDelegatedPrefix(), + compute.PublicDelegatedPrefix(), + compute.PublicDelegatedPrefix(), + ], + next_page_token="abc", + ), + compute.PublicDelegatedPrefixList( + items=[], + next_page_token="def", + ), + compute.PublicDelegatedPrefixList( + items=[ + compute.PublicDelegatedPrefix(), + ], + next_page_token="ghi", + ), + compute.PublicDelegatedPrefixList( + items=[ + compute.PublicDelegatedPrefix(), + compute.PublicDelegatedPrefix(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.PublicDelegatedPrefixList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.PublicDelegatedPrefix) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.ListPublicDelegatedPrefixesRequest, + compute.PatchPublicDelegatedPrefixeRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_rest(request_type): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "public_delegated_prefix": "sample3", + } + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefixList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListPublicDelegatedPrefixesRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchPublicDelegatedPrefixeRequest, ): transport_class = transports.PublicDelegatedPrefixesRestTransport request_init = {} request_init["project"] = "" + request_init["public_delegated_prefix"] = "" request_init["region"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1991,32 +3068,27 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["publicDelegatedPrefix"] = "public_delegated_prefix_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "publicDelegatedPrefix" in jsonified_request + assert jsonified_request["publicDelegatedPrefix"] == "public_delegated_prefix_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" @@ -2027,7 +3099,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefixList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2038,43 +3110,38 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", + "publicDelegatedPrefix", + "publicDelegatedPrefixResource", "region", ) ) @@ -2082,7 +3149,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.PublicDelegatedPrefixesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2095,9 +3162,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.PublicDelegatedPrefixesRestInterceptor, "post_list" + transports.PublicDelegatedPrefixesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.PublicDelegatedPrefixesRestInterceptor, "pre_list" + transports.PublicDelegatedPrefixesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2112,19 +3179,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.PublicDelegatedPrefixList.to_json( - compute.PublicDelegatedPrefixList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPublicDelegatedPrefixesRequest() + request = compute.PatchPublicDelegatedPrefixeRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefixList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -2136,8 +3201,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListPublicDelegatedPrefixesRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchPublicDelegatedPrefixeRequest ): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2145,7 +3210,36 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "public_delegated_prefix": "sample3", + } + request_init["public_delegated_prefix_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "ip_cidr_range": "ip_cidr_range_value", + "is_live_migration": True, + "kind": "kind_value", + "name": "name_value", + "parent_prefix": "parent_prefix_value", + "public_delegated_sub_prefixs": [ + { + "delegatee_project": "delegatee_project_value", + "description": "description_value", + "ip_cidr_range": "ip_cidr_range_value", + "is_address": True, + "name": "name_value", + "region": "region_value", + "status": "status_value", + } + ], + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2157,10 +3251,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2169,40 +3263,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.PublicDelegatedPrefixList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "public_delegated_prefix": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + public_delegated_prefix="public_delegated_prefix_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.PublicDelegatedPrefixList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/publicDelegatedPrefixes" + "%s/compute/v1/projects/{project}/regions/{region}/publicDelegatedPrefixes/{public_delegated_prefix}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = PublicDelegatedPrefixesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2211,73 +3313,22 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListPublicDelegatedPrefixesRequest(), + client.patch( + compute.PatchPublicDelegatedPrefixeRequest(), project="project_value", region="region_value", + public_delegated_prefix="public_delegated_prefix_value", + public_delegated_prefix_resource=compute.PublicDelegatedPrefix( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = PublicDelegatedPrefixesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.PublicDelegatedPrefixList( - items=[ - compute.PublicDelegatedPrefix(), - compute.PublicDelegatedPrefix(), - compute.PublicDelegatedPrefix(), - ], - next_page_token="abc", - ), - compute.PublicDelegatedPrefixList( - items=[], - next_page_token="def", - ), - compute.PublicDelegatedPrefixList( - items=[ - compute.PublicDelegatedPrefix(), - ], - next_page_token="ghi", - ), - compute.PublicDelegatedPrefixList( - items=[ - compute.PublicDelegatedPrefix(), - compute.PublicDelegatedPrefix(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.PublicDelegatedPrefixList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.PublicDelegatedPrefix) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2363,28 +3414,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2744,6 +3773,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = PublicDelegatedPrefixesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_public_delegated_prefixes_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2780,6 +3822,14 @@ def test_public_delegated_prefixes_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_public_delegated_prefixes_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_autoscalers.py b/tests/unit/gapic/compute_v1/test_region_autoscalers.py index 1d42f2dc7..d5fbd4056 100644 --- a/tests/unit/gapic/compute_v1/test_region_autoscalers.py +++ b/tests/unit/gapic/compute_v1/test_region_autoscalers.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_region_autoscalers_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -589,10 +591,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -617,7 +619,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionAutoscalerRequest, ): transport_class = transports.RegionAutoscalersRestTransport @@ -690,14 +692,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -716,7 +718,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -756,7 +758,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -768,7 +770,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionAutoscalerRequest ): client = RegionAutoscalersClient( @@ -789,10 +791,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -826,7 +828,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -839,7 +841,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -848,7 +850,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionAutoscalerRequest(), project="project_value", region="region_value", @@ -856,7 +858,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -865,11 +867,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionAutoscalerRequest, + compute.DeleteRegionAutoscalerRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -882,44 +884,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Autoscaler( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - recommended_size=1693, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", - target="target_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Autoscaler.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Autoscaler) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.recommended_size == 1693 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.status == "status_value" - assert response.target == "target_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionAutoscalerRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionAutoscalerRequest, +): transport_class = transports.RegionAutoscalersRestTransport request_init = {} @@ -937,7 +941,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionAutoscalerReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -948,7 +952,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionAutoscalerReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -966,7 +972,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionAutoscalerReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Autoscaler() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -977,32 +983,32 @@ def test_get_rest_required_fields(request_type=compute.GetRegionAutoscalerReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Autoscaler.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "autoscaler", @@ -1014,7 +1020,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1027,9 +1033,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "post_get" + transports.RegionAutoscalersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "pre_get" + transports.RegionAutoscalersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1044,17 +1050,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Autoscaler.to_json(compute.Autoscaler()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionAutoscalerRequest() + request = compute.DeleteRegionAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Autoscaler + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1066,8 +1072,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionAutoscalerRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionAutoscalerRequest ): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1087,10 +1093,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1099,7 +1105,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Autoscaler() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1119,12 +1125,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Autoscaler.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1137,7 +1143,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1146,15 +1152,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionAutoscalerRequest(), + client.delete_unary( + compute.DeleteRegionAutoscalerRequest(), project="project_value", region="region_value", autoscaler="autoscaler_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1163,132 +1169,65 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionAutoscalerRequest, + compute.GetRegionAutoscalerRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["autoscaler_resource"] = { - "autoscaling_policy": { - "cool_down_period_sec": 2112, - "cpu_utilization": { - "predictive_method": "predictive_method_value", - "utilization_target": 0.19540000000000002, - }, - "custom_metric_utilizations": [ - { - "filter": "filter_value", - "metric": "metric_value", - "single_instance_assignment": 0.2766, - "utilization_target": 0.19540000000000002, - "utilization_target_type": "utilization_target_type_value", - } - ], - "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, - "max_num_replicas": 1703, - "min_num_replicas": 1701, - "mode": "mode_value", - "scale_in_control": { - "max_scaled_in_replicas": { - "calculated": 1042, - "fixed": 528, - "percent": 753, - }, - "time_window_sec": 1600, - }, - "scaling_schedules": {}, - }, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recommended_size": 1693, - "region": "region_value", - "scaling_schedule_status": {}, - "self_link": "self_link_value", - "status": "status_value", - "status_details": [{"message": "message_value", "type_": "type__value"}], - "target": "target_value", - "zone": "zone_value", - } + request_init = {"project": "sample1", "region": "sample2", "autoscaler": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Autoscaler( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + recommended_size=1693, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", + status="status_value", + target="target_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Autoscaler.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Autoscaler) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.recommended_size == 1693 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" + assert response.status == "status_value" + assert response.target == "target_value" assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionAutoscalerRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRegionAutoscalerRequest): transport_class = transports.RegionAutoscalersRestTransport request_init = {} + request_init["autoscaler"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1302,22 +1241,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["autoscaler"] = "autoscaler_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "autoscaler" in jsonified_request + assert jsonified_request["autoscaler"] == "autoscaler_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1330,7 +1270,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Autoscaler() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1341,36 +1281,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Autoscaler.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "autoscalerResource", + "autoscaler", "project", "region", ) @@ -1379,7 +1318,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1392,9 +1331,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "post_insert" + transports.RegionAutoscalersRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "pre_insert" + transports.RegionAutoscalersRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1409,17 +1348,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Autoscaler.to_json(compute.Autoscaler()) - request = compute.InsertRegionAutoscalerRequest() + request = compute.GetRegionAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Autoscaler - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1431,8 +1370,1525 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionAutoscalerRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionAutoscalerRequest +): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "autoscaler": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Autoscaler() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "autoscaler": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + autoscaler="autoscaler_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Autoscaler.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/autoscalers/{autoscaler}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetRegionAutoscalerRequest(), + project="project_value", + region="region_value", + autoscaler="autoscaler_value", + ) + + +def test_get_rest_error(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionAutoscalerRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionAutoscalerRequest, +): + transport_class = transports.RegionAutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "autoscalerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionAutoscalersRestInterceptor(), + ) + client = RegionAutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionAutoscalerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionAutoscalerRequest +): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/autoscalers" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionAutoscalerRequest(), + project="project_value", + region="region_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + + +def test_insert_rest_error(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionAutoscalerRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionAutoscalerRequest, +): + transport_class = transports.RegionAutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "autoscalerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionAutoscalersRestInterceptor(), + ) + client = RegionAutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionAutoscalerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionAutoscalerRequest +): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/autoscalers" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionAutoscalerRequest(), + project="project_value", + region="region_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionAutoscalersRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionAutoscalerList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RegionAutoscalerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListRegionAutoscalersRequest): + transport_class = transports.RegionAutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RegionAutoscalerList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RegionAutoscalerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionAutoscalersRestInterceptor(), + ) + client = RegionAutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.RegionAutoscalerList.to_json( + compute.RegionAutoscalerList() + ) + + request = compute.ListRegionAutoscalersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RegionAutoscalerList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionAutoscalersRequest +): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionAutoscalerList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RegionAutoscalerList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/autoscalers" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionAutoscalersRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.RegionAutoscalerList( + items=[ + compute.Autoscaler(), + compute.Autoscaler(), + compute.Autoscaler(), + ], + next_page_token="abc", + ), + compute.RegionAutoscalerList( + items=[], + next_page_token="def", + ), + compute.RegionAutoscalerList( + items=[ + compute.Autoscaler(), + ], + next_page_token="ghi", + ), + compute.RegionAutoscalerList( + items=[ + compute.Autoscaler(), + compute.Autoscaler(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.RegionAutoscalerList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Autoscaler) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionAutoscalerRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchRegionAutoscalerRequest): + transport_class = transports.RegionAutoscalersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "autoscaler", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionAutoscalersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "autoscaler", + "requestId", + ) + ) + & set( + ( + "autoscalerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionAutoscalersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionAutoscalersRestInterceptor(), + ) + client = RegionAutoscalersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionAutoscalersRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionAutoscalerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionAutoscalerRequest ): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1496,10 +2952,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1531,7 +2987,7 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1544,7 +3000,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1553,8 +3009,8 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionAutoscalerRequest(), + client.patch( + compute.PatchRegionAutoscalerRequest(), project="project_value", region="region_value", autoscaler_resource=compute.Autoscaler( @@ -1563,7 +3019,7 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1572,11 +3028,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionAutoscalersRequest, + compute.PatchRegionAutoscalerRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1584,35 +3040,95 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionAutoscalerList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionAutoscalerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + response = client.patch_unary(request) + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListRegionAutoscalersRequest): + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionAutoscalerRequest, +): transport_class = transports.RegionAutoscalersRestTransport request_init = {} @@ -1629,7 +3145,7 @@ def test_list_rest_required_fields(request_type=compute.ListRegionAutoscalersReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1639,15 +3155,12 @@ def test_list_rest_required_fields(request_type=compute.ListRegionAutoscalersReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", + "autoscaler", + "request_id", ) ) jsonified_request.update(unset_fields) @@ -1665,7 +3178,7 @@ def test_list_rest_required_fields(request_type=compute.ListRegionAutoscalersReq request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RegionAutoscalerList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1676,42 +3189,41 @@ def test_list_rest_required_fields(request_type=compute.ListRegionAutoscalersReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionAutoscalerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "autoscaler", + "requestId", ) ) & set( ( + "autoscalerResource", "project", "region", ) @@ -1720,7 +3232,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1733,9 +3245,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "post_list" + transports.RegionAutoscalersRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "pre_list" + transports.RegionAutoscalersRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1750,19 +3262,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.RegionAutoscalerList.to_json( - compute.RegionAutoscalerList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionAutoscalersRequest() + request = compute.PatchRegionAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionAutoscalerList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -1774,8 +3284,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionAutoscalersRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionAutoscalerRequest ): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1784,6 +3294,50 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["autoscaler_resource"] = { + "autoscaling_policy": { + "cool_down_period_sec": 2112, + "cpu_utilization": { + "predictive_method": "predictive_method_value", + "utilization_target": 0.19540000000000002, + }, + "custom_metric_utilizations": [ + { + "filter": "filter_value", + "metric": "metric_value", + "single_instance_assignment": 0.2766, + "utilization_target": 0.19540000000000002, + "utilization_target_type": "utilization_target_type_value", + } + ], + "load_balancing_utilization": {"utilization_target": 0.19540000000000002}, + "max_num_replicas": 1703, + "min_num_replicas": 1701, + "mode": "mode_value", + "scale_in_control": { + "max_scaled_in_replicas": { + "calculated": 1042, + "fixed": 528, + "percent": 753, + }, + "time_window_sec": 1600, + }, + "scaling_schedules": {}, + }, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recommended_size": 1693, + "region": "region_value", + "scaling_schedule_status": {}, + "self_link": "self_link_value", + "status": "status_value", + "status_details": [{"message": "message_value", "type_": "type__value"}], + "target": "target_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1795,10 +3349,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1807,7 +3361,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionAutoscalerList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -1816,18 +3370,21 @@ def test_list_rest_flattened(): mock_args = dict( project="project_value", region="region_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionAutoscalerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1840,7 +3397,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1849,82 +3406,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionAutoscalersRequest(), + client.patch_unary( + compute.PatchRegionAutoscalerRequest(), project="project_value", region="region_value", + autoscaler_resource=compute.Autoscaler( + autoscaling_policy=compute.AutoscalingPolicy(cool_down_period_sec=2112) + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = RegionAutoscalersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.RegionAutoscalerList( - items=[ - compute.Autoscaler(), - compute.Autoscaler(), - compute.Autoscaler(), - ], - next_page_token="abc", - ), - compute.RegionAutoscalerList( - items=[], - next_page_token="def", - ), - compute.RegionAutoscalerList( - items=[ - compute.Autoscaler(), - ], - next_page_token="ghi", - ), - compute.RegionAutoscalerList( - items=[ - compute.Autoscaler(), - compute.Autoscaler(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.RegionAutoscalerList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Autoscaler) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionAutoscalerRequest, + compute.UpdateRegionAutoscalerRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2012,10 +3517,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2040,8 +3545,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionAutoscalerRequest, +def test_update_rest_required_fields( + request_type=compute.UpdateRegionAutoscalerRequest, ): transport_class = transports.RegionAutoscalersRestTransport @@ -2059,7 +3564,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2069,7 +3574,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -2103,7 +3608,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2115,19 +3620,19 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( @@ -2146,7 +3651,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.RegionAutoscalersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2159,9 +3664,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "post_patch" + transports.RegionAutoscalersRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.RegionAutoscalersRestInterceptor, "pre_patch" + transports.RegionAutoscalersRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2178,7 +3683,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRegionAutoscalerRequest() + request = compute.UpdateRegionAutoscalerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2186,7 +3691,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2198,8 +3703,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRegionAutoscalerRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateRegionAutoscalerRequest ): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2263,10 +3768,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2298,7 +3803,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2311,7 +3816,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2320,8 +3825,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionAutoscalerRequest(), + client.update( + compute.UpdateRegionAutoscalerRequest(), project="project_value", region="region_value", autoscaler_resource=compute.Autoscaler( @@ -2330,7 +3835,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = RegionAutoscalersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2435,28 +3940,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -2830,6 +4313,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionAutoscalersClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_autoscalers_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2866,6 +4362,14 @@ def test_region_autoscalers_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_autoscalers_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_backend_services.py b/tests/unit/gapic/compute_v1/test_region_backend_services.py index 50b071919..75681a41c 100644 --- a/tests/unit/gapic/compute_v1/test_region_backend_services.py +++ b/tests/unit/gapic/compute_v1/test_region_backend_services.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -555,7 +557,7 @@ def test_region_backend_services_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -603,10 +605,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -631,7 +633,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionBackendServiceRequest, ): transport_class = transports.RegionBackendServicesRestTransport @@ -704,14 +706,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -730,7 +732,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -770,7 +772,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -782,7 +784,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionBackendServiceRequest ): client = RegionBackendServicesClient( @@ -807,10 +809,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -844,7 +846,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -857,7 +859,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -866,7 +868,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionBackendServiceRequest(), project="project_value", region="region_value", @@ -874,7 +876,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -883,11 +885,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionBackendServiceRequest, + compute.DeleteRegionBackendServiceRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -904,68 +906,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendService( - affinity_cookie_ttl_sec=2432, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - custom_request_headers=["custom_request_headers_value"], - custom_response_headers=["custom_response_headers_value"], description="description_value", - edge_security_policy="edge_security_policy_value", - enable_c_d_n=True, - fingerprint="fingerprint_value", - health_checks=["health_checks_value"], + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - load_balancing_scheme="load_balancing_scheme_value", - locality_lb_policy="locality_lb_policy_value", name="name_value", - network="network_value", - port=453, - port_name="port_name_value", - protocol="protocol_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - security_policy="security_policy_value", self_link="self_link_value", - session_affinity="session_affinity_value", - timeout_sec=1185, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.BackendService) - assert response.affinity_cookie_ttl_sec == 2432 - assert response.creation_timestamp == "creation_timestamp_value" - assert response.custom_request_headers == ["custom_request_headers_value"] - assert response.custom_response_headers == ["custom_response_headers_value"] - assert response.description == "description_value" - assert response.edge_security_policy == "edge_security_policy_value" - assert response.enable_c_d_n is True - assert response.fingerprint == "fingerprint_value" - assert response.health_checks == ["health_checks_value"] - assert response.id == 205 - assert response.kind == "kind_value" - assert response.load_balancing_scheme == "load_balancing_scheme_value" - assert response.locality_lb_policy == "locality_lb_policy_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.port == 453 - assert response.port_name == "port_name_value" - assert response.protocol == "protocol_value" - assert response.region == "region_value" - assert response.security_policy == "security_policy_value" - assert response.self_link == "self_link_value" - assert response.session_affinity == "session_affinity_value" - assert response.timeout_sec == 1185 + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionBackendServiceRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionBackendServiceRequest, +): transport_class = transports.RegionBackendServicesRestTransport request_init = {} @@ -983,7 +963,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionBackendServiceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -994,7 +974,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionBackendServiceRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1012,7 +994,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionBackendServiceRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendService() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1023,32 +1005,32 @@ def test_get_rest_required_fields(request_type=compute.GetRegionBackendServiceRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "backendService", @@ -1060,7 +1042,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1073,9 +1055,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "post_get" + transports.RegionBackendServicesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "pre_get" + transports.RegionBackendServicesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1090,19 +1072,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendService.to_json( - compute.BackendService() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionBackendServiceRequest() + request = compute.DeleteRegionBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendService + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1114,8 +1094,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionBackendServiceRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionBackendServiceRequest ): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1139,10 +1119,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1151,7 +1131,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendService() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1171,12 +1151,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1189,7 +1169,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1198,15 +1178,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionBackendServiceRequest(), + client.delete_unary( + compute.DeleteRegionBackendServiceRequest(), project="project_value", region="region_value", backend_service="backend_service_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1215,11 +1195,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetHealthRegionBackendServiceRequest, + compute.GetRegionBackendServiceRequest, dict, ], ) -def test_get_health_rest(request_type): +def test_get_rest(request_type): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1231,32 +1211,73 @@ def test_get_health_rest(request_type): "region": "sample2", "backend_service": "sample3", } - request_init["resource_group_reference_resource"] = {"group": "group_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceGroupHealth( + return_value = compute.BackendService( + affinity_cookie_ttl_sec=2432, + creation_timestamp="creation_timestamp_value", + custom_request_headers=["custom_request_headers_value"], + custom_response_headers=["custom_response_headers_value"], + description="description_value", + edge_security_policy="edge_security_policy_value", + enable_c_d_n=True, + fingerprint="fingerprint_value", + health_checks=["health_checks_value"], + id=205, kind="kind_value", + load_balancing_scheme="load_balancing_scheme_value", + locality_lb_policy="locality_lb_policy_value", + name="name_value", + network="network_value", + port=453, + port_name="port_name_value", + protocol="protocol_value", + region="region_value", + security_policy="security_policy_value", + self_link="self_link_value", + session_affinity="session_affinity_value", + timeout_sec=1185, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + json_return_value = compute.BackendService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_health(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.BackendServiceGroupHealth) + assert isinstance(response, compute.BackendService) + assert response.affinity_cookie_ttl_sec == 2432 + assert response.creation_timestamp == "creation_timestamp_value" + assert response.custom_request_headers == ["custom_request_headers_value"] + assert response.custom_response_headers == ["custom_response_headers_value"] + assert response.description == "description_value" + assert response.edge_security_policy == "edge_security_policy_value" + assert response.enable_c_d_n is True + assert response.fingerprint == "fingerprint_value" + assert response.health_checks == ["health_checks_value"] + assert response.id == 205 assert response.kind == "kind_value" + assert response.load_balancing_scheme == "load_balancing_scheme_value" + assert response.locality_lb_policy == "locality_lb_policy_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.port == 453 + assert response.port_name == "port_name_value" + assert response.protocol == "protocol_value" + assert response.region == "region_value" + assert response.security_policy == "security_policy_value" + assert response.self_link == "self_link_value" + assert response.session_affinity == "session_affinity_value" + assert response.timeout_sec == 1185 -def test_get_health_rest_required_fields( - request_type=compute.GetHealthRegionBackendServiceRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRegionBackendServiceRequest): transport_class = transports.RegionBackendServicesRestTransport request_init = {} @@ -1274,7 +1295,7 @@ def test_get_health_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_health._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1285,7 +1306,7 @@ def test_get_health_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_health._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1303,7 +1324,7 @@ def test_get_health_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceGroupHealth() + return_value = compute.BackendService() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1314,31 +1335,30 @@ def test_get_health_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + json_return_value = compute.BackendService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_health(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_health_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_health._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( @@ -1346,14 +1366,13 @@ def test_get_health_rest_unset_required_fields(): "backendService", "project", "region", - "resourceGroupReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_health_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1366,9 +1385,9 @@ def test_get_health_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "post_get_health" + transports.RegionBackendServicesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "pre_get_health" + transports.RegionBackendServicesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1383,19 +1402,19 @@ def test_get_health_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendServiceGroupHealth.to_json( - compute.BackendServiceGroupHealth() + req.return_value._content = compute.BackendService.to_json( + compute.BackendService() ) - request = compute.GetHealthRegionBackendServiceRequest() + request = compute.GetRegionBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceGroupHealth + post.return_value = compute.BackendService - client.get_health( + client.get( request, metadata=[ ("key", "val"), @@ -1407,8 +1426,8 @@ def test_get_health_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_health_rest_bad_request( - transport: str = "rest", request_type=compute.GetHealthRegionBackendServiceRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionBackendServiceRequest ): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1421,7 +1440,6 @@ def test_get_health_rest_bad_request( "region": "sample2", "backend_service": "sample3", } - request_init["resource_group_reference_resource"] = {"group": "group_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1433,10 +1451,10 @@ def test_get_health_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_health(request) + client.get(request) -def test_get_health_rest_flattened(): +def test_get_rest_flattened(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1445,7 +1463,7 @@ def test_get_health_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceGroupHealth() + return_value = compute.BackendService() # get arguments that satisfy an http rule for this method sample_request = { @@ -1459,34 +1477,31 @@ def test_get_health_rest_flattened(): project="project_value", region="region_value", backend_service="backend_service_value", - resource_group_reference_resource=compute.ResourceGroupReference( - group="group_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + json_return_value = compute.BackendService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_health(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/backendServices/{backend_service}/getHealth" + "%s/compute/v1/projects/{project}/regions/{region}/backendServices/{backend_service}" % client.transport._host, args[1], ) -def test_get_health_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1495,18 +1510,15 @@ def test_get_health_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_health( - compute.GetHealthRegionBackendServiceRequest(), + client.get( + compute.GetRegionBackendServiceRequest(), project="project_value", region="region_value", backend_service="backend_service_value", - resource_group_reference_resource=compute.ResourceGroupReference( - group="group_value" - ), ) -def test_get_health_rest_error(): +def test_get_rest_error(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1515,235 +1527,52 @@ def test_get_health_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionBackendServiceRequest, + compute.GetHealthRegionBackendServiceRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_health_rest(request_type): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["backend_service_resource"] = { - "affinity_cookie_ttl_sec": 2432, - "backends": [ - { - "balancing_mode": "balancing_mode_value", - "capacity_scaler": 0.1575, - "description": "description_value", - "failover": True, - "group": "group_value", - "max_connections": 1608, - "max_connections_per_endpoint": 2990, - "max_connections_per_instance": 2978, - "max_rate": 849, - "max_rate_per_endpoint": 0.22310000000000002, - "max_rate_per_instance": 0.22190000000000001, - "max_utilization": 0.1633, - } - ], - "cdn_policy": { - "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], - "cache_key_policy": { - "include_host": True, - "include_http_headers": [ - "include_http_headers_value_1", - "include_http_headers_value_2", - ], - "include_named_cookies": [ - "include_named_cookies_value_1", - "include_named_cookies_value_2", - ], - "include_protocol": True, - "include_query_string": True, - "query_string_blacklist": [ - "query_string_blacklist_value_1", - "query_string_blacklist_value_2", - ], - "query_string_whitelist": [ - "query_string_whitelist_value_1", - "query_string_whitelist_value_2", - ], - }, - "cache_mode": "cache_mode_value", - "client_ttl": 1074, - "default_ttl": 1176, - "max_ttl": 761, - "negative_caching": True, - "negative_caching_policy": [{"code": 411, "ttl": 340}], - "request_coalescing": True, - "serve_while_stale": 1813, - "signed_url_cache_max_age_sec": 2890, - "signed_url_key_names": [ - "signed_url_key_names_value_1", - "signed_url_key_names_value_2", - ], - }, - "circuit_breakers": { - "max_connections": 1608, - "max_pending_requests": 2149, - "max_requests": 1313, - "max_requests_per_connection": 2902, - "max_retries": 1187, - }, - "connection_draining": {"draining_timeout_sec": 2124}, - "connection_tracking_policy": { - "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", - "enable_strong_affinity": True, - "idle_timeout_sec": 1694, - "tracking_mode": "tracking_mode_value", - }, - "consistent_hash": { - "http_cookie": { - "name": "name_value", - "path": "path_value", - "ttl": {"nanos": 543, "seconds": 751}, - }, - "http_header_name": "http_header_name_value", - "minimum_ring_size": 1829, - }, - "creation_timestamp": "creation_timestamp_value", - "custom_request_headers": [ - "custom_request_headers_value_1", - "custom_request_headers_value_2", - ], - "custom_response_headers": [ - "custom_response_headers_value_1", - "custom_response_headers_value_2", - ], - "description": "description_value", - "edge_security_policy": "edge_security_policy_value", - "enable_c_d_n": True, - "failover_policy": { - "disable_connection_drain_on_failover": True, - "drop_traffic_if_unhealthy": True, - "failover_ratio": 0.1494, - }, - "fingerprint": "fingerprint_value", - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "iap": { - "enabled": True, - "oauth2_client_id": "oauth2_client_id_value", - "oauth2_client_secret": "oauth2_client_secret_value", - "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", - }, - "id": 205, - "kind": "kind_value", - "load_balancing_scheme": "load_balancing_scheme_value", - "locality_lb_policies": [ - { - "custom_policy": {"data": "data_value", "name": "name_value"}, - "policy": {"name": "name_value"}, - } - ], - "locality_lb_policy": "locality_lb_policy_value", - "log_config": {"enable": True, "sample_rate": 0.1165}, - "max_stream_duration": {}, - "name": "name_value", - "network": "network_value", - "outlier_detection": { - "base_ejection_time": {}, - "consecutive_errors": 1956, - "consecutive_gateway_failure": 2880, - "enforcing_consecutive_errors": 3006, - "enforcing_consecutive_gateway_failure": 3930, - "enforcing_success_rate": 2334, - "interval": {}, - "max_ejection_percent": 2118, - "success_rate_minimum_hosts": 2799, - "success_rate_request_volume": 2915, - "success_rate_stdev_factor": 2663, - }, - "port": 453, - "port_name": "port_name_value", - "protocol": "protocol_value", - "region": "region_value", - "security_policy": "security_policy_value", - "security_settings": { - "client_tls_policy": "client_tls_policy_value", - "subject_alt_names": [ - "subject_alt_names_value_1", - "subject_alt_names_value_2", - ], - }, - "self_link": "self_link_value", - "session_affinity": "session_affinity_value", - "subsetting": {"policy": "policy_value"}, - "timeout_sec": 1185, + request_init = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", } + request_init["resource_group_reference_resource"] = {"group": "group_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.BackendServiceGroupHealth( kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_health(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, compute.BackendServiceGroupHealth) assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionBackendServiceRequest, +def test_get_health_rest_required_fields( + request_type=compute.GetHealthRegionBackendServiceRequest, ): transport_class = transports.RegionBackendServicesRestTransport request_init = {} + request_init["backend_service"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1757,22 +1586,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_health._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["backendService"] = "backend_service_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get_health._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1785,7 +1615,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.BackendServiceGroupHealth() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1804,37 +1634,38 @@ def test_insert_unary_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_health(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_health_rest_unset_required_fields(): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_health._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "backendServiceResource", + "backendService", "project", "region", + "resourceGroupReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_health_rest_interceptors(null_interceptor): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1847,9 +1678,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "post_insert" + transports.RegionBackendServicesRestInterceptor, "post_get_health" ) as post, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "pre_insert" + transports.RegionBackendServicesRestInterceptor, "pre_get_health" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1864,17 +1695,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) - - request = compute.InsertRegionBackendServiceRequest() + req.return_value._content = compute.BackendServiceGroupHealth.to_json( + compute.BackendServiceGroupHealth() + ) + + request = compute.GetHealthRegionBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.BackendServiceGroupHealth - client.insert_unary( + client.get_health( request, metadata=[ ("key", "val"), @@ -1886,14 +1719,124 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionBackendServiceRequest +def test_get_health_rest_bad_request( + transport: str = "rest", request_type=compute.GetHealthRegionBackendServiceRequest ): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + request_init["resource_group_reference_resource"] = {"group": "group_value"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_health(request) + + +def test_get_health_rest_flattened(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceGroupHealth() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + backend_service="backend_service_value", + resource_group_reference_resource=compute.ResourceGroupReference( + group="group_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceGroupHealth.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_health(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/backendServices/{backend_service}/getHealth" + % client.transport._host, + args[1], + ) + + +def test_get_health_rest_flattened_error(transport: str = "rest"): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_health( + compute.GetHealthRegionBackendServiceRequest(), + project="project_value", + region="region_value", + backend_service="backend_service_value", + resource_group_reference_resource=compute.ResourceGroupReference( + group="group_value" + ), + ) + + +def test_get_health_rest_error(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionBackendServiceRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} request_init["backend_service_resource"] = { @@ -2045,137 +1988,2249 @@ def test_insert_unary_rest_bad_request( } request = request_type(request_init) - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.insert_unary(request) - - -def test_insert_unary_rest_flattened(): - client = RegionBackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() - - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} - - # get truthy value for each flattened field - mock_args = dict( - project="project_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - backend_service_resource=compute.BackendService( - affinity_cookie_ttl_sec=2432 - ), + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) - mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 json_return_value = compute.Operation.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + response = client.insert(request) - client.insert_unary(**mock_args) + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/backendServices" - % client.transport._host, - args[1], - ) +def test_insert_rest_required_fields( + request_type=compute.InsertRegionBackendServiceRequest, +): + transport_class = transports.RegionBackendServicesRestTransport -def test_insert_unary_rest_flattened_error(transport: str = "rest"): - client = RegionBackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) ) - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionBackendServiceRequest(), - project="project_value", - region="region_value", - backend_service_resource=compute.BackendService( - affinity_cookie_ttl_sec=2432 - ), - ) + # verify fields with default values are dropped + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) -def test_insert_unary_rest_error(): - client = RegionBackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + # verify required fields with default values are now present + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" -@pytest.mark.parametrize( - "request_type", - [ - compute.ListRegionBackendServicesRequest, - dict, - ], -) -def test_list_rest(request_type): - client = RegionBackendServicesClient( + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendServiceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionBackendServicesRestInterceptor(), + ) + client = RegionBackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionBackendServiceRequest +): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/backendServices" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionBackendServiceRequest(), + project="project_value", + region="region_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_insert_rest_error(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionBackendServiceRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionBackendServiceRequest, +): + transport_class = transports.RegionBackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendServiceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionBackendServicesRestInterceptor(), + ) + client = RegionBackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionBackendServiceRequest +): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/backendServices" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionBackendServiceRequest(), + project="project_value", + region="region_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionBackendServicesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionBackendServicesRequest, +): + transport_class = transports.RegionBackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionBackendServicesRestInterceptor(), + ) + client = RegionBackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.BackendServiceList.to_json( + compute.BackendServiceList() + ) + + request = compute.ListRegionBackendServicesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.BackendServiceList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionBackendServicesRequest +): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.BackendServiceList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.BackendServiceList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/backendServices" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionBackendServicesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.BackendServiceList( + items=[ + compute.BackendService(), + compute.BackendService(), + compute.BackendService(), + ], + next_page_token="abc", + ), + compute.BackendServiceList( + items=[], + next_page_token="def", + ), + compute.BackendServiceList( + items=[ + compute.BackendService(), + ], + next_page_token="ghi", + ), + compute.BackendServiceList( + items=[ + compute.BackendService(), + compute.BackendService(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.BackendServiceList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.BackendService) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionBackendServiceRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchRegionBackendServiceRequest, +): + transport_class = transports.RegionBackendServicesRestTransport + + request_init = {} + request_init["backend_service"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["backendService"] = "backend_service_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "backendService", + "backendServiceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionBackendServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionBackendServicesRestInterceptor(), + ) + client = RegionBackendServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionBackendServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionBackendServiceRequest +): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/backendServices/{backend_service}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchRegionBackendServiceRequest(), + project="project_value", + region="region_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), + ) + + +def test_patch_rest_error(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionBackendServiceRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields( - request_type=compute.ListRegionBackendServicesRequest, +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionBackendServiceRequest, ): transport_class = transports.RegionBackendServicesRestTransport request_init = {} + request_init["backend_service"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -2189,30 +4244,25 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["backendService"] = "backend_service_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "backendService" in jsonified_request + assert jsonified_request["backendService"] == "backend_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -2225,7 +4275,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2236,42 +4286,37 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "backendService", + "backendServiceResource", "project", "region", ) @@ -2280,7 +4325,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2293,9 +4338,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "post_list" + transports.RegionBackendServicesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "pre_list" + transports.RegionBackendServicesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2310,40 +4355,189 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.BackendServiceList.to_json( - compute.BackendServiceList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionBackendServicesRequest() + request = compute.PatchRegionBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), ("cephalopod", "squid"), ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionBackendServicesRequest -): - client = RegionBackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionBackendServiceRequest +): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } + request_init["backend_service_resource"] = { + "affinity_cookie_ttl_sec": 2432, + "backends": [ + { + "balancing_mode": "balancing_mode_value", + "capacity_scaler": 0.1575, + "description": "description_value", + "failover": True, + "group": "group_value", + "max_connections": 1608, + "max_connections_per_endpoint": 2990, + "max_connections_per_instance": 2978, + "max_rate": 849, + "max_rate_per_endpoint": 0.22310000000000002, + "max_rate_per_instance": 0.22190000000000001, + "max_utilization": 0.1633, + } + ], + "cdn_policy": { + "bypass_cache_on_request_headers": [{"header_name": "header_name_value"}], + "cache_key_policy": { + "include_host": True, + "include_http_headers": [ + "include_http_headers_value_1", + "include_http_headers_value_2", + ], + "include_named_cookies": [ + "include_named_cookies_value_1", + "include_named_cookies_value_2", + ], + "include_protocol": True, + "include_query_string": True, + "query_string_blacklist": [ + "query_string_blacklist_value_1", + "query_string_blacklist_value_2", + ], + "query_string_whitelist": [ + "query_string_whitelist_value_1", + "query_string_whitelist_value_2", + ], + }, + "cache_mode": "cache_mode_value", + "client_ttl": 1074, + "default_ttl": 1176, + "max_ttl": 761, + "negative_caching": True, + "negative_caching_policy": [{"code": 411, "ttl": 340}], + "request_coalescing": True, + "serve_while_stale": 1813, + "signed_url_cache_max_age_sec": 2890, + "signed_url_key_names": [ + "signed_url_key_names_value_1", + "signed_url_key_names_value_2", + ], + }, + "circuit_breakers": { + "max_connections": 1608, + "max_pending_requests": 2149, + "max_requests": 1313, + "max_requests_per_connection": 2902, + "max_retries": 1187, + }, + "connection_draining": {"draining_timeout_sec": 2124}, + "connection_tracking_policy": { + "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", + "enable_strong_affinity": True, + "idle_timeout_sec": 1694, + "tracking_mode": "tracking_mode_value", + }, + "consistent_hash": { + "http_cookie": { + "name": "name_value", + "path": "path_value", + "ttl": {"nanos": 543, "seconds": 751}, + }, + "http_header_name": "http_header_name_value", + "minimum_ring_size": 1829, + }, + "creation_timestamp": "creation_timestamp_value", + "custom_request_headers": [ + "custom_request_headers_value_1", + "custom_request_headers_value_2", + ], + "custom_response_headers": [ + "custom_response_headers_value_1", + "custom_response_headers_value_2", + ], + "description": "description_value", + "edge_security_policy": "edge_security_policy_value", + "enable_c_d_n": True, + "failover_policy": { + "disable_connection_drain_on_failover": True, + "drop_traffic_if_unhealthy": True, + "failover_ratio": 0.1494, + }, + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "iap": { + "enabled": True, + "oauth2_client_id": "oauth2_client_id_value", + "oauth2_client_secret": "oauth2_client_secret_value", + "oauth2_client_secret_sha256": "oauth2_client_secret_sha256_value", + }, + "id": 205, + "kind": "kind_value", + "load_balancing_scheme": "load_balancing_scheme_value", + "locality_lb_policies": [ + { + "custom_policy": {"data": "data_value", "name": "name_value"}, + "policy": {"name": "name_value"}, + } + ], + "locality_lb_policy": "locality_lb_policy_value", + "log_config": {"enable": True, "sample_rate": 0.1165}, + "max_stream_duration": {}, + "name": "name_value", + "network": "network_value", + "outlier_detection": { + "base_ejection_time": {}, + "consecutive_errors": 1956, + "consecutive_gateway_failure": 2880, + "enforcing_consecutive_errors": 3006, + "enforcing_consecutive_gateway_failure": 3930, + "enforcing_success_rate": 2334, + "interval": {}, + "max_ejection_percent": 2118, + "success_rate_minimum_hosts": 2799, + "success_rate_request_volume": 2915, + "success_rate_stdev_factor": 2663, + }, + "port": 453, + "port_name": "port_name_value", + "protocol": "protocol_value", + "region": "region_value", + "security_policy": "security_policy_value", + "security_settings": { + "client_tls_policy": "client_tls_policy_value", + "subject_alt_names": [ + "subject_alt_names_value_1", + "subject_alt_names_value_2", + ], + }, + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + "subsetting": {"policy": "policy_value"}, + "timeout_sec": 1185, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2355,10 +4549,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2367,40 +4561,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.BackendServiceList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "backend_service": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.BackendServiceList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/backendServices" + "%s/compute/v1/projects/{project}/regions/{region}/backendServices/{backend_service}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2409,82 +4611,31 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionBackendServicesRequest(), + client.patch_unary( + compute.PatchRegionBackendServiceRequest(), project="project_value", region="region_value", + backend_service="backend_service_value", + backend_service_resource=compute.BackendService( + affinity_cookie_ttl_sec=2432 + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = RegionBackendServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.BackendServiceList( - items=[ - compute.BackendService(), - compute.BackendService(), - compute.BackendService(), - ], - next_page_token="abc", - ), - compute.BackendServiceList( - items=[], - next_page_token="def", - ), - compute.BackendServiceList( - items=[ - compute.BackendService(), - ], - next_page_token="ghi", - ), - compute.BackendServiceList( - items=[ - compute.BackendService(), - compute.BackendService(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.BackendServiceList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.BackendService) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionBackendServiceRequest, + compute.UpdateRegionBackendServiceRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2679,10 +4830,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2707,8 +4858,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionBackendServiceRequest, +def test_update_rest_required_fields( + request_type=compute.UpdateRegionBackendServiceRequest, ): transport_class = transports.RegionBackendServicesRestTransport @@ -2727,7 +4878,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2738,7 +4889,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2769,7 +4920,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2781,19 +4932,19 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -2808,7 +4959,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.RegionBackendServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2821,9 +4972,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "post_patch" + transports.RegionBackendServicesRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.RegionBackendServicesRestInterceptor, "pre_patch" + transports.RegionBackendServicesRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2840,7 +4991,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRegionBackendServiceRequest() + request = compute.UpdateRegionBackendServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2848,7 +4999,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2860,8 +5011,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRegionBackendServiceRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateRegionBackendServiceRequest ): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3032,10 +5183,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3072,7 +5223,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -3085,7 +5236,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3094,8 +5245,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionBackendServiceRequest(), + client.update( + compute.UpdateRegionBackendServiceRequest(), project="project_value", region="region_value", backend_service="backend_service_value", @@ -3105,7 +5256,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = RegionBackendServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3317,28 +5468,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -3820,6 +5949,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionBackendServicesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_backend_services_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3857,6 +5999,14 @@ def test_region_backend_services_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_backend_services_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_commitments.py b/tests/unit/gapic/compute_v1/test_region_commitments.py index 2a67fbc09..188d20e00 100644 --- a/tests/unit/gapic/compute_v1/test_region_commitments.py +++ b/tests/unit/gapic/compute_v1/test_region_commitments.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -1206,7 +1208,7 @@ def test_get_rest_error(): dict, ], ) -def test_insert_unary_rest(request_type): +def test_insert_rest(request_type): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1314,10 +1316,10 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1342,7 +1344,7 @@ def test_insert_unary_rest(request_type): assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( +def test_insert_rest_required_fields( request_type=compute.InsertRegionCommitmentRequest, ): transport_class = transports.RegionCommitmentsRestTransport @@ -1412,14 +1414,14 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RegionCommitmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1438,7 +1440,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RegionCommitmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1478,7 +1480,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.insert( request, metadata=[ ("key", "val"), @@ -1490,7 +1492,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( +def test_insert_rest_bad_request( transport: str = "rest", request_type=compute.InsertRegionCommitmentRequest ): client = RegionCommitmentsClient( @@ -1575,10 +1577,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.insert(request) -def test_insert_unary_rest_flattened(): +def test_insert_rest_flattened(): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1608,7 +1610,7 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1621,7 +1623,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1630,7 +1632,7 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( + client.insert( compute.InsertRegionCommitmentRequest(), project="project_value", region="region_value", @@ -1638,7 +1640,7 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): ) -def test_insert_unary_rest_error(): +def test_insert_rest_error(): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1647,11 +1649,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionCommitmentsRequest, + compute.InsertRegionCommitmentRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_unary_rest(request_type): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1659,38 +1661,912 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["commitment_resource"] = { + "auto_renew": True, + "category": "category_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "end_timestamp": "end_timestamp_value", + "id": 205, + "kind": "kind_value", + "license_resource": { + "amount": 660, + "cores_per_license": "cores_per_license_value", + "license_": "license__value", + }, + "name": "name_value", + "plan": "plan_value", + "region": "region_value", + "reservations": [ + { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [ + {"disk_size_gb": 1261, "interface": "interface_value"} + ], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } + ], + "resources": [ + { + "accelerator_type": "accelerator_type_value", + "amount": 660, + "type_": "type__value", + } + ], + "self_link": "self_link_value", + "start_timestamp": "start_timestamp_value", + "status": "status_value", + "status_message": "status_message_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.CommitmentList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.CommitmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionCommitmentRequest, +): + transport_class = transports.RegionCommitmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionCommitmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "commitmentResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionCommitmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionCommitmentsRestInterceptor(), + ) + client = RegionCommitmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionCommitmentsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionCommitmentsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionCommitmentRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionCommitmentRequest +): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["commitment_resource"] = { + "auto_renew": True, + "category": "category_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "end_timestamp": "end_timestamp_value", + "id": 205, + "kind": "kind_value", + "license_resource": { + "amount": 660, + "cores_per_license": "cores_per_license_value", + "license_": "license__value", + }, + "name": "name_value", + "plan": "plan_value", + "region": "region_value", + "reservations": [ + { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [ + {"disk_size_gb": 1261, "interface": "interface_value"} + ], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } + ], + "resources": [ + { + "accelerator_type": "accelerator_type_value", + "amount": 660, + "type_": "type__value", + } + ], + "self_link": "self_link_value", + "start_timestamp": "start_timestamp_value", + "status": "status_value", + "status_message": "status_message_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + commitment_resource=compute.Commitment(auto_renew=True), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/commitments" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionCommitmentRequest(), + project="project_value", + region="region_value", + commitment_resource=compute.Commitment(auto_renew=True), + ) + + +def test_insert_unary_rest_error(): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionCommitmentsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.CommitmentList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.CommitmentList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListRegionCommitmentsRequest): + transport_class = transports.RegionCommitmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.CommitmentList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.CommitmentList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionCommitmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionCommitmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionCommitmentsRestInterceptor(), + ) + client = RegionCommitmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionCommitmentsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionCommitmentsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.CommitmentList.to_json( + compute.CommitmentList() + ) + + request = compute.ListRegionCommitmentsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.CommitmentList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionCommitmentsRequest +): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.CommitmentList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.CommitmentList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/commitments" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionCommitmentsRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.CommitmentList( + items=[ + compute.Commitment(), + compute.Commitment(), + compute.Commitment(), + ], + next_page_token="abc", + ), + compute.CommitmentList( + items=[], + next_page_token="def", + ), + compute.CommitmentList( + items=[ + compute.Commitment(), + ], + next_page_token="ghi", + ), + compute.CommitmentList( + items=[ + compute.Commitment(), + compute.Commitment(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.CommitmentList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Commitment) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.UpdateRegionCommitmentRequest, + dict, + ], +) +def test_update_rest(request_type): + client = RegionCommitmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "commitment": "sample3"} + request_init["commitment_resource"] = { + "auto_renew": True, + "category": "category_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "end_timestamp": "end_timestamp_value", + "id": 205, + "kind": "kind_value", + "license_resource": { + "amount": 660, + "cores_per_license": "cores_per_license_value", + "license_": "license__value", + }, + "name": "name_value", + "plan": "plan_value", + "region": "region_value", + "reservations": [ + { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [ + {"disk_size_gb": 1261, "interface": "interface_value"} + ], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } + ], + "resources": [ + { + "accelerator_type": "accelerator_type_value", + "amount": 660, + "type_": "type__value", + } + ], + "self_link": "self_link_value", + "start_timestamp": "start_timestamp_value", + "status": "status_value", + "status_message": "status_message_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.update(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListRegionCommitmentsRequest): +def test_update_rest_required_fields( + request_type=compute.UpdateRegionCommitmentRequest, +): transport_class = transports.RegionCommitmentsRestTransport request_init = {} + request_init["commitment"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1704,30 +2580,31 @@ def test_list_rest_required_fields(request_type=compute.ListRegionCommitmentsReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["commitment"] = "commitment_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", + "paths", + "request_id", + "update_mask", ) ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "commitment" in jsonified_request + assert jsonified_request["commitment"] == "commitment_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1740,7 +2617,7 @@ def test_list_rest_required_fields(request_type=compute.ListRegionCommitmentsReq request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.CommitmentList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1751,42 +2628,43 @@ def test_list_rest_required_fields(request_type=compute.ListRegionCommitmentsReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.CommitmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.RegionCommitmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "paths", + "requestId", + "updateMask", ) ) & set( ( + "commitment", + "commitmentResource", "project", "region", ) @@ -1795,7 +2673,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.RegionCommitmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1808,9 +2686,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionCommitmentsRestInterceptor, "post_list" + transports.RegionCommitmentsRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.RegionCommitmentsRestInterceptor, "pre_list" + transports.RegionCommitmentsRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1825,19 +2703,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.CommitmentList.to_json( - compute.CommitmentList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionCommitmentsRequest() + request = compute.UpdateRegionCommitmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.CommitmentList + post.return_value = compute.Operation - client.list( + client.update( request, metadata=[ ("key", "val"), @@ -1849,8 +2725,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionCommitmentsRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateRegionCommitmentRequest ): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1858,7 +2734,71 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "commitment": "sample3"} + request_init["commitment_resource"] = { + "auto_renew": True, + "category": "category_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "end_timestamp": "end_timestamp_value", + "id": 205, + "kind": "kind_value", + "license_resource": { + "amount": 660, + "cores_per_license": "cores_per_license_value", + "license_": "license__value", + }, + "name": "name_value", + "plan": "plan_value", + "region": "region_value", + "reservations": [ + { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [ + {"disk_size_gb": 1261, "interface": "interface_value"} + ], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } + ], + "resources": [ + { + "accelerator_type": "accelerator_type_value", + "amount": 660, + "type_": "type__value", + } + ], + "self_link": "self_link_value", + "start_timestamp": "start_timestamp_value", + "status": "status_value", + "status_message": "status_message_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1870,10 +2810,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.update(request) -def test_list_rest_flattened(): +def test_update_rest_flattened(): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1882,40 +2822,46 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.CommitmentList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "commitment": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + commitment="commitment_value", + commitment_resource=compute.Commitment(auto_renew=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.CommitmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/commitments" + "%s/compute/v1/projects/{project}/regions/{region}/commitments/{commitment}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = RegionCommitmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1924,73 +2870,20 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionCommitmentsRequest(), + client.update( + compute.UpdateRegionCommitmentRequest(), project="project_value", region="region_value", + commitment="commitment_value", + commitment_resource=compute.Commitment(auto_renew=True), ) -def test_list_rest_pager(transport: str = "rest"): +def test_update_rest_error(): client = RegionCommitmentsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.CommitmentList( - items=[ - compute.Commitment(), - compute.Commitment(), - compute.Commitment(), - ], - next_page_token="abc", - ), - compute.CommitmentList( - items=[], - next_page_token="def", - ), - compute.CommitmentList( - items=[ - compute.Commitment(), - ], - next_page_token="ghi", - ), - compute.CommitmentList( - items=[ - compute.Commitment(), - compute.Commitment(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.CommitmentList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Commitment) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2111,28 +3004,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -2535,6 +3406,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionCommitmentsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_commitments_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2570,6 +3454,14 @@ def test_region_commitments_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_commitments_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_disk_types.py b/tests/unit/gapic/compute_v1/test_region_disk_types.py index 514755885..6e601f4ce 100644 --- a/tests/unit/gapic/compute_v1/test_region_disk_types.py +++ b/tests/unit/gapic/compute_v1/test_region_disk_types.py @@ -1251,6 +1251,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionDiskTypesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_disk_types_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1283,6 +1296,14 @@ def test_region_disk_types_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_disk_types_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_disks.py b/tests/unit/gapic/compute_v1/test_region_disks.py index 3bbce144f..33cf52eb9 100644 --- a/tests/unit/gapic/compute_v1/test_region_disks.py +++ b/tests/unit/gapic/compute_v1/test_region_disks.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -516,7 +518,7 @@ def test_region_disks_client_client_options_credentials_file( dict, ], ) -def test_add_resource_policies_unary_rest(request_type): +def test_add_resource_policies_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -563,10 +565,10 @@ def test_add_resource_policies_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_resource_policies_unary(request) + response = client.add_resource_policies(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -591,7 +593,7 @@ def test_add_resource_policies_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_resource_policies_unary_rest_required_fields( +def test_add_resource_policies_rest_required_fields( request_type=compute.AddResourcePoliciesRegionDiskRequest, ): transport_class = transports.RegionDisksRestTransport @@ -665,14 +667,14 @@ def test_add_resource_policies_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_resource_policies_unary(request) + response = client.add_resource_policies(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_resource_policies_unary_rest_unset_required_fields(): +def test_add_resource_policies_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -692,7 +694,7 @@ def test_add_resource_policies_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_resource_policies_unary_rest_interceptors(null_interceptor): +def test_add_resource_policies_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -732,7 +734,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_resource_policies_unary( + client.add_resource_policies( request, metadata=[ ("key", "val"), @@ -744,7 +746,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_resource_policies_unary_rest_bad_request( +def test_add_resource_policies_rest_bad_request( transport: str = "rest", request_type=compute.AddResourcePoliciesRegionDiskRequest ): client = RegionDisksClient( @@ -768,10 +770,10 @@ def test_add_resource_policies_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_resource_policies_unary(request) + client.add_resource_policies(request) -def test_add_resource_policies_unary_rest_flattened(): +def test_add_resource_policies_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -804,7 +806,7 @@ def test_add_resource_policies_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_resource_policies_unary(**mock_args) + client.add_resource_policies(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -817,7 +819,7 @@ def test_add_resource_policies_unary_rest_flattened(): ) -def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest"): +def test_add_resource_policies_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -826,7 +828,7 @@ def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_resource_policies_unary( + client.add_resource_policies( compute.AddResourcePoliciesRegionDiskRequest(), project="project_value", region="region_value", @@ -837,7 +839,7 @@ def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest ) -def test_add_resource_policies_unary_rest_error(): +def test_add_resource_policies_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -846,11 +848,11 @@ def test_add_resource_policies_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.CreateSnapshotRegionDiskRequest, + compute.AddResourcePoliciesRegionDiskRequest, dict, ], ) -def test_create_snapshot_unary_rest(request_type): +def test_add_resource_policies_unary_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -858,37 +860,8 @@ def test_create_snapshot_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request_init["snapshot_resource"] = { - "auto_created": True, - "chain_name": "chain_name_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_size_gb": 1261, - "download_bytes": 1502, - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "snapshot_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "status": "status_value", - "storage_bytes": 1403, - "storage_bytes_status": "storage_bytes_status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + request_init["region_disks_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] } request = request_type(request_init) @@ -926,36 +899,14 @@ def test_create_snapshot_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_snapshot_unary(request) + response = client.add_resource_policies_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_create_snapshot_unary_rest_required_fields( - request_type=compute.CreateSnapshotRegionDiskRequest, +def test_add_resource_policies_unary_rest_required_fields( + request_type=compute.AddResourcePoliciesRegionDiskRequest, ): transport_class = transports.RegionDisksRestTransport @@ -974,7 +925,7 @@ def test_create_snapshot_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_snapshot._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -985,7 +936,7 @@ def test_create_snapshot_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_snapshot._get_unset_required_fields(jsonified_request) + ).add_resource_policies._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1028,19 +979,19 @@ def test_create_snapshot_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_snapshot_unary(request) + response = client.add_resource_policies_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_snapshot_unary_rest_unset_required_fields(): +def test_add_resource_policies_unary_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_snapshot._get_unset_required_fields({}) + unset_fields = transport.add_resource_policies._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -1048,14 +999,14 @@ def test_create_snapshot_unary_rest_unset_required_fields(): "disk", "project", "region", - "snapshotResource", + "regionDisksAddResourcePoliciesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_snapshot_unary_rest_interceptors(null_interceptor): +def test_add_resource_policies_unary_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1068,9 +1019,9 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_create_snapshot" + transports.RegionDisksRestInterceptor, "post_add_resource_policies" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_create_snapshot" + transports.RegionDisksRestInterceptor, "pre_add_resource_policies" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1087,7 +1038,7 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.CreateSnapshotRegionDiskRequest() + request = compute.AddResourcePoliciesRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1095,7 +1046,7 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.create_snapshot_unary( + client.add_resource_policies_unary( request, metadata=[ ("key", "val"), @@ -1107,8 +1058,8 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_snapshot_unary_rest_bad_request( - transport: str = "rest", request_type=compute.CreateSnapshotRegionDiskRequest +def test_add_resource_policies_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddResourcePoliciesRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1117,37 +1068,8 @@ def test_create_snapshot_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request_init["snapshot_resource"] = { - "auto_created": True, - "chain_name": "chain_name_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_size_gb": 1261, - "download_bytes": 1502, - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "snapshot_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "status": "status_value", - "storage_bytes": 1403, - "storage_bytes_status": "storage_bytes_status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + request_init["region_disks_add_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] } request = request_type(request_init) @@ -1160,10 +1082,10 @@ def test_create_snapshot_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_snapshot_unary(request) + client.add_resource_policies_unary(request) -def test_create_snapshot_unary_rest_flattened(): +def test_add_resource_policies_unary_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1182,7 +1104,9 @@ def test_create_snapshot_unary_rest_flattened(): project="project_value", region="region_value", disk="disk_value", - snapshot_resource=compute.Snapshot(auto_created=True), + region_disks_add_resource_policies_request_resource=compute.RegionDisksAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) mock_args.update(sample_request) @@ -1194,20 +1118,20 @@ def test_create_snapshot_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_snapshot_unary(**mock_args) + client.add_resource_policies_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/createSnapshot" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/addResourcePolicies" % client.transport._host, args[1], ) -def test_create_snapshot_unary_rest_flattened_error(transport: str = "rest"): +def test_add_resource_policies_unary_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1216,16 +1140,18 @@ def test_create_snapshot_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_snapshot_unary( - compute.CreateSnapshotRegionDiskRequest(), + client.add_resource_policies_unary( + compute.AddResourcePoliciesRegionDiskRequest(), project="project_value", region="region_value", disk="disk_value", - snapshot_resource=compute.Snapshot(auto_created=True), + region_disks_add_resource_policies_request_resource=compute.RegionDisksAddResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), ) -def test_create_snapshot_unary_rest_error(): +def test_add_resource_policies_unary_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1234,11 +1160,11 @@ def test_create_snapshot_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteRegionDiskRequest, + compute.CreateSnapshotRegionDiskRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_create_snapshot_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1246,6 +1172,38 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1282,10 +1240,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.create_snapshot(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1310,8 +1268,8 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteRegionDiskRequest, +def test_create_snapshot_rest_required_fields( + request_type=compute.CreateSnapshotRegionDiskRequest, ): transport_class = transports.RegionDisksRestTransport @@ -1330,7 +1288,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1341,7 +1299,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1372,9 +1330,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1383,19 +1342,19 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.create_snapshot(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_create_snapshot_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.create_snapshot._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -1403,13 +1362,14 @@ def test_delete_unary_rest_unset_required_fields(): "disk", "project", "region", + "snapshotResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_create_snapshot_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1422,9 +1382,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_delete" + transports.RegionDisksRestInterceptor, "post_create_snapshot" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_delete" + transports.RegionDisksRestInterceptor, "pre_create_snapshot" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1441,7 +1401,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteRegionDiskRequest() + request = compute.CreateSnapshotRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1449,7 +1409,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.create_snapshot( request, metadata=[ ("key", "val"), @@ -1461,8 +1421,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteRegionDiskRequest +def test_create_snapshot_rest_bad_request( + transport: str = "rest", request_type=compute.CreateSnapshotRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1471,39 +1431,72 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_unary(request) - - -def test_delete_unary_rest_flattened(): - client = RegionDisksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation() - - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} - - # get truthy value for each flattened field - mock_args = dict( + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_snapshot(request) + + +def test_create_snapshot_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( project="project_value", region="region_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) mock_args.update(sample_request) @@ -1515,20 +1508,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.create_snapshot(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/createSnapshot" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_create_snapshot_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1537,15 +1530,16 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRegionDiskRequest(), + client.create_snapshot( + compute.CreateSnapshotRegionDiskRequest(), project="project_value", region="region_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) -def test_delete_unary_rest_error(): +def test_create_snapshot_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1554,11 +1548,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionDiskRequest, + compute.CreateSnapshotRegionDiskRequest, dict, ], ) -def test_get_rest(request_type): +def test_create_snapshot_unary_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1566,89 +1560,83 @@ def test_get_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Disk( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", - last_attach_timestamp="last_attach_timestamp_value", - last_detach_timestamp="last_detach_timestamp_value", - license_codes=[1360], - licenses=["licenses_value"], - location_hint="location_hint_value", name="name_value", - options="options_value", - physical_block_size_bytes=2663, - provisioned_iops=1740, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - replica_zones=["replica_zones_value"], - resource_policies=["resource_policies_value"], - satisfies_pzs=True, self_link="self_link_value", - size_gb=739, - source_disk="source_disk_value", - source_disk_id="source_disk_id_value", - source_image="source_image_value", - source_image_id="source_image_id_value", - source_snapshot="source_snapshot_value", - source_snapshot_id="source_snapshot_id_value", - source_storage_object="source_storage_object_value", - status="status_value", - type_="type__value", - users=["users_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Disk.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.create_snapshot_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Disk) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.last_attach_timestamp == "last_attach_timestamp_value" - assert response.last_detach_timestamp == "last_detach_timestamp_value" - assert response.license_codes == [1360] - assert response.licenses == ["licenses_value"] - assert response.location_hint == "location_hint_value" - assert response.name == "name_value" - assert response.options == "options_value" - assert response.physical_block_size_bytes == 2663 - assert response.provisioned_iops == 1740 - assert response.region == "region_value" - assert response.replica_zones == ["replica_zones_value"] - assert response.resource_policies == ["resource_policies_value"] - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.size_gb == 739 - assert response.source_disk == "source_disk_value" - assert response.source_disk_id == "source_disk_id_value" - assert response.source_image == "source_image_value" - assert response.source_image_id == "source_image_id_value" - assert response.source_snapshot == "source_snapshot_value" - assert response.source_snapshot_id == "source_snapshot_id_value" - assert response.source_storage_object == "source_storage_object_value" - assert response.status == "status_value" - assert response.type_ == "type__value" - assert response.users == ["users_value"] - assert response.zone == "zone_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionDiskRequest): +def test_create_snapshot_unary_rest_required_fields( + request_type=compute.CreateSnapshotRegionDiskRequest, +): transport_class = transports.RegionDisksRestTransport request_init = {} @@ -1666,7 +1654,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionDiskRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1677,7 +1665,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionDiskRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).create_snapshot._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1695,7 +1685,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionDiskRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Disk() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1706,44 +1696,46 @@ def test_get_rest_required_fields(request_type=compute.GetRegionDiskRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Disk.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.create_snapshot_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_create_snapshot_unary_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.create_snapshot._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "disk", "project", "region", + "snapshotResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_create_snapshot_unary_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1756,9 +1748,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_get" + transports.RegionDisksRestInterceptor, "post_create_snapshot" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_get" + transports.RegionDisksRestInterceptor, "pre_create_snapshot" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1773,17 +1765,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Disk.to_json(compute.Disk()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionDiskRequest() + request = compute.CreateSnapshotRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Disk + post.return_value = compute.Operation - client.get( + client.create_snapshot_unary( request, metadata=[ ("key", "val"), @@ -1795,8 +1787,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionDiskRequest +def test_create_snapshot_unary_rest_bad_request( + transport: str = "rest", request_type=compute.CreateSnapshotRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1805,64 +1797,97 @@ def test_get_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get(request) - - -def test_get_rest_flattened(): - client = RegionDisksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Disk() - - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} - - # get truthy value for each flattened field - mock_args = dict( + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_snapshot_unary(request) + + +def test_create_snapshot_unary_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( project="project_value", region="region_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Disk.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.create_snapshot_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/createSnapshot" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_create_snapshot_unary_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1871,15 +1896,16 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionDiskRequest(), + client.create_snapshot_unary( + compute.CreateSnapshotRegionDiskRequest(), project="project_value", region="region_value", disk="disk_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) -def test_get_rest_error(): +def test_create_snapshot_unary_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1888,53 +1914,89 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyRegionDiskRequest, + compute.DeleteRegionDiskRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyRegionDiskRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteRegionDiskRequest): transport_class = transports.RegionDisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1946,29 +2008,29 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1977,7 +2039,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1988,44 +2050,44 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "disk", "project", "region", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2038,9 +2100,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_get_iam_policy" + transports.RegionDisksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_get_iam_policy" + transports.RegionDisksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2055,17 +2117,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyRegionDiskRequest() + request = compute.DeleteRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete( request, metadata=[ ("key", "val"), @@ -2077,8 +2139,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyRegionDiskRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2086,7 +2148,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2098,10 +2160,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2110,45 +2172,41 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "resource": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", + disk="disk_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2157,15 +2215,15 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyRegionDiskRequest(), + client.delete( + compute.DeleteRegionDiskRequest(), project="project_value", region="region_value", - resource="resource_value", + disk="disk_value", ) -def test_get_iam_policy_rest_error(): +def test_delete_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2174,62 +2232,18 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionDiskRequest, + compute.DeleteRegionDiskRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["disk_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "guest_os_features": [{"type_": "type__value"}], - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_attach_timestamp": "last_attach_timestamp_value", - "last_detach_timestamp": "last_detach_timestamp_value", - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "options": "options_value", - "physical_block_size_bytes": 2663, - "provisioned_iops": 1740, - "region": "region_value", - "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "self_link": "self_link_value", - "size_gb": 739, - "source_disk": "source_disk_value", - "source_disk_id": "source_disk_id_value", - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_image_id": "source_image_id_value", - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - "source_snapshot_id": "source_snapshot_id_value", - "source_storage_object": "source_storage_object_value", - "status": "status_value", - "type_": "type__value", - "users": ["users_value_1", "users_value_2"], - "zone": "zone_value", - } + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2266,40 +2280,19 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionDiskRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionDiskRequest, ): transport_class = transports.RegionDisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -2313,27 +2306,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "source_image", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -2357,10 +2348,9 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2369,29 +2359,24 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "sourceImage", - ) - ) + set(("requestId",)) & set( ( - "diskResource", + "disk", "project", "region", ) @@ -2400,7 +2385,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2413,9 +2398,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_insert" + transports.RegionDisksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_insert" + transports.RegionDisksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2432,7 +2417,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertRegionDiskRequest() + request = compute.DeleteRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2440,7 +2425,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2452,8 +2437,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionDiskRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2461,51 +2446,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["disk_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "guest_os_features": [{"type_": "type__value"}], - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "last_attach_timestamp": "last_attach_timestamp_value", - "last_detach_timestamp": "last_detach_timestamp_value", - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "options": "options_value", - "physical_block_size_bytes": 2663, - "provisioned_iops": 1740, - "region": "region_value", - "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], - "satisfies_pzs": True, - "self_link": "self_link_value", - "size_gb": 739, - "source_disk": "source_disk_value", - "source_disk_id": "source_disk_id_value", - "source_image": "source_image_value", - "source_image_encryption_key": {}, - "source_image_id": "source_image_id_value", - "source_snapshot": "source_snapshot_value", - "source_snapshot_encryption_key": {}, - "source_snapshot_id": "source_snapshot_id_value", - "source_storage_object": "source_storage_object_value", - "status": "status_value", - "type_": "type__value", - "users": ["users_value_1", "users_value_2"], - "zone": "zone_value", - } + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2517,10 +2458,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2532,13 +2473,13 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + disk="disk_value", ) mock_args.update(sample_request) @@ -2550,20 +2491,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2572,15 +2513,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionDiskRequest(), + client.delete_unary( + compute.DeleteRegionDiskRequest(), project="project_value", region="region_value", - disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + disk="disk_value", ) -def test_insert_unary_rest_error(): +def test_delete_unary_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2589,50 +2530,105 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionDisksRequest, + compute.GetRegionDiskRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.DiskList( - id="id_value", + return_value = compute.Disk( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, kind="kind_value", - next_page_token="next_page_token_value", + label_fingerprint="label_fingerprint_value", + last_attach_timestamp="last_attach_timestamp_value", + last_detach_timestamp="last_detach_timestamp_value", + license_codes=[1360], + licenses=["licenses_value"], + location_hint="location_hint_value", + name="name_value", + options="options_value", + physical_block_size_bytes=2663, + provisioned_iops=1740, + region="region_value", + replica_zones=["replica_zones_value"], + resource_policies=["resource_policies_value"], + satisfies_pzs=True, self_link="self_link_value", + size_gb=739, + source_disk="source_disk_value", + source_disk_id="source_disk_id_value", + source_image="source_image_value", + source_image_id="source_image_id_value", + source_snapshot="source_snapshot_value", + source_snapshot_id="source_snapshot_id_value", + source_storage_object="source_storage_object_value", + status="status_value", + type_="type__value", + users=["users_value"], + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskList.to_json(return_value) + json_return_value = compute.Disk.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.Disk) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.last_attach_timestamp == "last_attach_timestamp_value" + assert response.last_detach_timestamp == "last_detach_timestamp_value" + assert response.license_codes == [1360] + assert response.licenses == ["licenses_value"] + assert response.location_hint == "location_hint_value" + assert response.name == "name_value" + assert response.options == "options_value" + assert response.physical_block_size_bytes == 2663 + assert response.provisioned_iops == 1740 + assert response.region == "region_value" + assert response.replica_zones == ["replica_zones_value"] + assert response.resource_policies == ["resource_policies_value"] + assert response.satisfies_pzs is True assert response.self_link == "self_link_value" + assert response.size_gb == 739 + assert response.source_disk == "source_disk_value" + assert response.source_disk_id == "source_disk_id_value" + assert response.source_image == "source_image_value" + assert response.source_image_id == "source_image_id_value" + assert response.source_snapshot == "source_snapshot_value" + assert response.source_snapshot_id == "source_snapshot_id_value" + assert response.source_storage_object == "source_storage_object_value" + assert response.status == "status_value" + assert response.type_ == "type__value" + assert response.users == ["users_value"] + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListRegionDisksRequest): +def test_get_rest_required_fields(request_type=compute.GetRegionDiskRequest): transport_class = transports.RegionDisksRestTransport request_init = {} + request_init["disk"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -2646,30 +2642,23 @@ def test_list_rest_required_fields(request_type=compute.ListRegionDisksRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -2682,7 +2671,7 @@ def test_list_rest_required_fields(request_type=compute.ListRegionDisksRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.DiskList() + return_value = compute.Disk() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2700,35 +2689,28 @@ def test_list_rest_required_fields(request_type=compute.ListRegionDisksRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskList.to_json(return_value) + json_return_value = compute.Disk.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( + "disk", "project", "region", ) @@ -2737,7 +2719,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2750,9 +2732,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_list" + transports.RegionDisksRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_list" + transports.RegionDisksRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2767,17 +2749,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.DiskList.to_json(compute.DiskList()) + req.return_value._content = compute.Disk.to_json(compute.Disk()) - request = compute.ListRegionDisksRequest() + request = compute.GetRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskList + post.return_value = compute.Disk - client.list( + client.get( request, metadata=[ ("key", "val"), @@ -2789,8 +2771,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionDisksRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2798,7 +2780,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2810,10 +2792,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get(request) -def test_list_rest_flattened(): +def test_get_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2822,40 +2804,41 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.DiskList() + return_value = compute.Disk() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + disk="disk_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.DiskList.to_json(return_value) + json_return_value = compute.Disk.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2864,165 +2847,70 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionDisksRequest(), + client.get( + compute.GetRegionDiskRequest(), project="project_value", region="region_value", + disk="disk_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_rest_error(): client = RegionDisksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.DiskList( - items=[ - compute.Disk(), - compute.Disk(), - compute.Disk(), - ], - next_page_token="abc", - ), - compute.DiskList( - items=[], - next_page_token="def", - ), - compute.DiskList( - items=[ - compute.Disk(), - ], - next_page_token="ghi", - ), - compute.DiskList( - items=[ - compute.Disk(), - compute.Disk(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.DiskList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Disk) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.RemoveResourcePoliciesRegionDiskRequest, + compute.GetIamPolicyRegionDiskRequest, dict, ], ) -def test_remove_resource_policies_unary_rest(request_type): +def test_get_iam_policy_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request_init["region_disks_remove_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] - } + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_resource_policies_unary(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_remove_resource_policies_unary_rest_required_fields( - request_type=compute.RemoveResourcePoliciesRegionDiskRequest, +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyRegionDiskRequest, ): transport_class = transports.RegionDisksRestTransport request_init = {} - request_init["disk"] = "" request_init["project"] = "" request_init["region"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -3034,29 +2922,29 @@ def test_remove_resource_policies_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_resource_policies._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_resource_policies._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "disk" in jsonified_request - assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3065,7 +2953,7 @@ def test_remove_resource_policies_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3076,46 +2964,44 @@ def test_remove_resource_policies_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_resource_policies_unary(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_resource_policies_unary_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("optionsRequestedPolicyVersion",)) & set( ( - "disk", "project", "region", - "regionDisksRemoveResourcePoliciesRequestResource", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3128,9 +3014,9 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_remove_resource_policies" + transports.RegionDisksRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_remove_resource_policies" + transports.RegionDisksRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3145,17 +3031,17 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.RemoveResourcePoliciesRegionDiskRequest() + request = compute.GetIamPolicyRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Policy - client.remove_resource_policies_unary( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -3167,9 +3053,8 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_resource_policies_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.RemoveResourcePoliciesRegionDiskRequest, +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3177,10 +3062,7 @@ def test_remove_resource_policies_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request_init["region_disks_remove_resource_policies_request_resource"] = { - "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] - } + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3192,10 +3074,10 @@ def test_remove_resource_policies_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_resource_policies_unary(request) + client.get_iam_policy(request) -def test_remove_resource_policies_unary_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3204,44 +3086,45 @@ def test_remove_resource_policies_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - disk="disk_value", - region_disks_remove_resource_policies_request_resource=compute.RegionDisksRemoveResourcePoliciesRequest( - resource_policies=["resource_policies_value"] - ), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_resource_policies_unary(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/removeResourcePolicies" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3250,18 +3133,15 @@ def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "r # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_resource_policies_unary( - compute.RemoveResourcePoliciesRegionDiskRequest(), + client.get_iam_policy( + compute.GetIamPolicyRegionDiskRequest(), project="project_value", region="region_value", - disk="disk_value", - region_disks_remove_resource_policies_request_resource=compute.RegionDisksRemoveResourcePoliciesRequest( - resource_policies=["resource_policies_value"] - ), + resource="resource_value", ) -def test_remove_resource_policies_unary_rest_error(): +def test_get_iam_policy_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3270,19 +3150,62 @@ def test_remove_resource_policies_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ResizeRegionDiskRequest, + compute.InsertRegionDiskRequest, dict, ], ) -def test_resize_unary_rest(request_type): +def test_insert_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request_init["region_disks_resize_request_resource"] = {"size_gb": 739} + request_init = {"project": "sample1", "region": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3319,10 +3242,10 @@ def test_resize_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3347,13 +3270,10 @@ def test_resize_unary_rest(request_type): assert response.zone == "zone_value" -def test_resize_unary_rest_required_fields( - request_type=compute.ResizeRegionDiskRequest, -): +def test_insert_rest_required_fields(request_type=compute.InsertRegionDiskRequest): transport_class = transports.RegionDisksRestTransport request_init = {} - request_init["disk"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -3367,25 +3287,27 @@ def test_resize_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["disk"] = "disk_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "request_id", + "source_image", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "disk" in jsonified_request - assert jsonified_request["disk"] == "disk_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -3421,34 +3343,38 @@ def test_resize_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_resize_unary_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.resize._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "requestId", + "sourceImage", + ) + ) & set( ( - "disk", + "diskResource", "project", "region", - "regionDisksResizeRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_resize_unary_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3461,9 +3387,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_resize" + transports.RegionDisksRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_resize" + transports.RegionDisksRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3480,7 +3406,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ResizeRegionDiskRequest() + request = compute.InsertRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3488,7 +3414,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.resize_unary( + client.insert( request, metadata=[ ("key", "val"), @@ -3500,8 +3426,8 @@ def test_resize_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_resize_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ResizeRegionDiskRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3509,8 +3435,51 @@ def test_resize_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} - request_init["region_disks_resize_request_resource"] = {"size_gb": 739} + request_init = {"project": "sample1", "region": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3522,10 +3491,10 @@ def test_resize_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.resize_unary(request) + client.insert(request) -def test_resize_unary_rest_flattened(): +def test_insert_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3537,16 +3506,13 @@ def test_resize_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - disk="disk_value", - region_disks_resize_request_resource=compute.RegionDisksResizeRequest( - size_gb=739 - ), + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), ) mock_args.update(sample_request) @@ -3558,20 +3524,20 @@ def test_resize_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.resize_unary(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/resize" + "%s/compute/v1/projects/{project}/regions/{region}/disks" % client.transport._host, args[1], ) -def test_resize_unary_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3580,18 +3546,15 @@ def test_resize_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.resize_unary( - compute.ResizeRegionDiskRequest(), + client.insert( + compute.InsertRegionDiskRequest(), project="project_value", region="region_value", - disk="disk_value", - region_disks_resize_request_resource=compute.RegionDisksResizeRequest( - size_gb=739 - ), + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), ) -def test_resize_unary_rest_error(): +def test_insert_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3600,88 +3563,2375 @@ def test_resize_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicyRegionDiskRequest, + compute.InsertRegionDiskRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_insert_unary_rest(request_type): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} - request_init["region_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], + request_init = {"project": "sample1", "region": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionDiskRequest, +): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_image", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "sourceImage", + ) + ) + & set( + ( + "diskResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionDiskRequest +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["disk_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "guest_os_features": [{"type_": "type__value"}], + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "last_attach_timestamp": "last_attach_timestamp_value", + "last_detach_timestamp": "last_detach_timestamp_value", + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "options": "options_value", + "physical_block_size_bytes": 2663, + "provisioned_iops": 1740, + "region": "region_value", + "replica_zones": ["replica_zones_value_1", "replica_zones_value_2"], + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"], + "satisfies_pzs": True, + "self_link": "self_link_value", + "size_gb": 739, + "source_disk": "source_disk_value", + "source_disk_id": "source_disk_id_value", + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_image_id": "source_image_id_value", + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + "source_snapshot_id": "source_snapshot_id_value", + "source_storage_object": "source_storage_object_value", + "status": "status_value", + "type_": "type__value", + "users": ["users_value_1", "users_value_2"], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionDiskRequest(), + project="project_value", + region="region_value", + disk_resource=compute.Disk(creation_timestamp="creation_timestamp_value"), + ) + + +def test_insert_unary_rest_error(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionDisksRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.DiskList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.DiskList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListRegionDisksRequest): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.DiskList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.DiskList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.DiskList.to_json(compute.DiskList()) + + request = compute.ListRegionDisksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.DiskList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionDisksRequest +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.DiskList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.DiskList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionDisksRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.DiskList( + items=[ + compute.Disk(), + compute.Disk(), + compute.Disk(), + ], + next_page_token="abc", + ), + compute.DiskList( + items=[], + next_page_token="def", + ), + compute.DiskList( + items=[ + compute.Disk(), + ], + next_page_token="ghi", + ), + compute.DiskList( + items=[ + compute.Disk(), + compute.Disk(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.DiskList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Disk) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveResourcePoliciesRegionDiskRequest, + dict, + ], +) +def test_remove_resource_policies_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_resource_policies(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_remove_resource_policies_rest_required_fields( + request_type=compute.RemoveResourcePoliciesRegionDiskRequest, +): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_resource_policies(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_resource_policies_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "project", + "region", + "regionDisksRemoveResourcePoliciesRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_resource_policies_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_remove_resource_policies" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_remove_resource_policies" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveResourcePoliciesRegionDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_resource_policies( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_resource_policies_rest_bad_request( + transport: str = "rest", + request_type=compute.RemoveResourcePoliciesRegionDiskRequest, +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_resource_policies(request) + + +def test_remove_resource_policies_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + disk="disk_value", + region_disks_remove_resource_policies_request_resource=compute.RegionDisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_resource_policies(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/removeResourcePolicies" + % client.transport._host, + args[1], + ) + + +def test_remove_resource_policies_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_resource_policies( + compute.RemoveResourcePoliciesRegionDiskRequest(), + project="project_value", + region="region_value", + disk="disk_value", + region_disks_remove_resource_policies_request_resource=compute.RegionDisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + + +def test_remove_resource_policies_rest_error(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveResourcePoliciesRegionDiskRequest, + dict, + ], +) +def test_remove_resource_policies_unary_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_resource_policies_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_remove_resource_policies_unary_rest_required_fields( + request_type=compute.RemoveResourcePoliciesRegionDiskRequest, +): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_resource_policies._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_resource_policies_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_resource_policies_unary_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_resource_policies._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "project", + "region", + "regionDisksRemoveResourcePoliciesRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_remove_resource_policies" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_remove_resource_policies" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveResourcePoliciesRegionDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_resource_policies_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_resource_policies_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.RemoveResourcePoliciesRegionDiskRequest, +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_remove_resource_policies_request_resource"] = { + "resource_policies": ["resource_policies_value_1", "resource_policies_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_resource_policies_unary(request) + + +def test_remove_resource_policies_unary_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + disk="disk_value", + region_disks_remove_resource_policies_request_resource=compute.RegionDisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_resource_policies_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/removeResourcePolicies" + % client.transport._host, + args[1], + ) + + +def test_remove_resource_policies_unary_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_resource_policies_unary( + compute.RemoveResourcePoliciesRegionDiskRequest(), + project="project_value", + region="region_value", + disk="disk_value", + region_disks_remove_resource_policies_request_resource=compute.RegionDisksRemoveResourcePoliciesRequest( + resource_policies=["resource_policies_value"] + ), + ) + + +def test_remove_resource_policies_unary_rest_error(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeRegionDiskRequest, + dict, + ], +) +def test_resize_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_resize_rest_required_fields(request_type=compute.ResizeRegionDiskRequest): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "project", + "region", + "regionDisksResizeRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeRegionDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeRegionDiskRequest +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize(request) + + +def test_resize_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + disk="disk_value", + region_disks_resize_request_resource=compute.RegionDisksResizeRequest( + size_gb=739 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize( + compute.ResizeRegionDiskRequest(), + project="project_value", + region="region_value", + disk="disk_value", + region_disks_resize_request_resource=compute.RegionDisksResizeRequest( + size_gb=739 + ), + ) + + +def test_resize_rest_error(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeRegionDiskRequest, + dict, + ], +) +def test_resize_unary_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_resize_unary_rest_required_fields( + request_type=compute.ResizeRegionDiskRequest, +): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["disk"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["disk"] = "disk_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "disk" in jsonified_request + assert jsonified_request["disk"] == "disk_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_unary_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "disk", + "project", + "region", + "regionDisksResizeRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_unary_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeRegionDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeRegionDiskRequest +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "disk": "sample3"} + request_init["region_disks_resize_request_resource"] = {"size_gb": 739} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize_unary(request) + + +def test_resize_unary_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2", "disk": "sample3"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + disk="disk_value", + region_disks_resize_request_resource=compute.RegionDisksResizeRequest( + size_gb=739 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks/{disk}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_unary_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize_unary( + compute.ResizeRegionDiskRequest(), + project="project_value", + region="region_value", + disk="disk_value", + region_disks_resize_request_resource=compute.RegionDisksResizeRequest( + size_gb=739 + ), + ) + + +def test_resize_unary_rest_error(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyRegionDiskRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicyRegionDiskRequest, +): + transport_class = transports.RegionDisksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "regionSetPolicyRequestResource", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.RegionDisksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionDisksRestInterceptor(), + ) + client = RegionDisksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionDisksRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.RegionDisksRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.SetIamPolicyRegionDiskRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicyRegionDiskRequest +): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], "not_ins": ["not_ins_value_1", "not_ins_value_2"], "permissions": ["permissions_value_1", "permissions_value_2"], } @@ -3691,32 +5941,179 @@ def test_set_iam_policy_rest(request_type): } request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + resource="resource_value", + region_set_policy_request_resource=compute.RegionSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/disks/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicyRegionDiskRequest(), + project="project_value", + region="region_value", + resource="resource_value", + region_set_policy_request_resource=compute.RegionSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsRegionDiskRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = RegionDisksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicyRegionDiskRequest, +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsRegionDiskRequest, ): transport_class = transports.RegionDisksRestTransport @@ -3735,7 +6132,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3746,7 +6143,9 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3764,7 +6163,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3783,30 +6182,30 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_set_labels_rest_unset_required_fields(): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "region", - "regionSetPolicyRequestResource", + "regionSetLabelsRequestResource", "resource", ) ) @@ -3814,7 +6213,7 @@ def test_set_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.RegionDisksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3827,9 +6226,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionDisksRestInterceptor, "post_set_iam_policy" + transports.RegionDisksRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.RegionDisksRestInterceptor, "pre_set_iam_policy" + transports.RegionDisksRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3844,17 +6243,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicyRegionDiskRequest() + request = compute.SetLabelsRegionDiskRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.set_labels( request, metadata=[ ("key", "val"), @@ -3866,8 +6265,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicyRegionDiskRequest +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsRegionDiskRequest ): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3876,82 +6275,9 @@ def test_set_iam_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} - request_init["region_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, } request = request_type(request_init) @@ -3964,10 +6290,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.set_labels(request) -def test_set_iam_policy_rest_flattened(): +def test_set_labels_rest_flattened(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3976,7 +6302,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -3990,8 +6316,8 @@ def test_set_iam_policy_rest_flattened(): project="project_value", region="region_value", resource="resource_value", - region_set_policy_request_resource=compute.RegionSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) mock_args.update(sample_request) @@ -3999,25 +6325,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.set_labels(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/disks/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/disks/{resource}/setLabels" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_set_labels_rest_flattened_error(transport: str = "rest"): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4026,18 +6352,18 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicyRegionDiskRequest(), + client.set_labels( + compute.SetLabelsRegionDiskRequest(), project="project_value", region="region_value", resource="resource_value", - region_set_policy_request_resource=compute.RegionSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) -def test_set_iam_policy_rest_error(): +def test_set_labels_rest_error(): client = RegionDisksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4102,28 +6428,6 @@ def test_set_labels_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_labels_unary_rest_required_fields( @@ -4754,6 +7058,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionDisksClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_disks_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4796,6 +7113,14 @@ def test_region_disks_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_disks_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_health_check_services.py b/tests/unit/gapic/compute_v1/test_region_health_check_services.py index 090195bae..b651f12c7 100644 --- a/tests/unit/gapic/compute_v1/test_region_health_check_services.py +++ b/tests/unit/gapic/compute_v1/test_region_health_check_services.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -563,7 +565,7 @@ def test_region_health_check_services_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -611,10 +613,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -639,7 +641,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionHealthCheckServiceRequest, ): transport_class = transports.RegionHealthCheckServicesRestTransport @@ -712,14 +714,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -738,7 +740,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -778,7 +780,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -790,7 +792,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionHealthCheckServiceRequest ): client = RegionHealthCheckServicesClient( @@ -815,10 +817,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -852,7 +854,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -865,7 +867,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -874,7 +876,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionHealthCheckServiceRequest(), project="project_value", region="region_value", @@ -882,7 +884,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -891,11 +893,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionHealthCheckServiceRequest, + compute.DeleteRegionHealthCheckServiceRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -912,50 +914,45 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckService( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", - health_checks=["health_checks_value"], - health_status_aggregation_policy="health_status_aggregation_policy_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network_endpoint_groups=["network_endpoint_groups_value"], - notification_endpoints=["notification_endpoints_value"], + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.HealthCheckService) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.health_checks == ["health_checks_value"] - assert ( - response.health_status_aggregation_policy - == "health_status_aggregation_policy_value" - ) - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.network_endpoint_groups == ["network_endpoint_groups_value"] - assert response.notification_endpoints == ["notification_endpoints_value"] - assert response.region == "region_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetRegionHealthCheckServiceRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionHealthCheckServiceRequest, ): transport_class = transports.RegionHealthCheckServicesRestTransport @@ -974,7 +971,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -985,7 +982,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1003,7 +1002,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckService() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1014,32 +1013,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "healthCheckService", @@ -1051,7 +1050,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1064,9 +1063,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthCheckServicesRestInterceptor, "post_get" + transports.RegionHealthCheckServicesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionHealthCheckServicesRestInterceptor, "pre_get" + transports.RegionHealthCheckServicesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1081,19 +1080,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.HealthCheckService.to_json( - compute.HealthCheckService() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionHealthCheckServiceRequest() + request = compute.DeleteRegionHealthCheckServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckService + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1105,8 +1102,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionHealthCheckServiceRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionHealthCheckServiceRequest ): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1130,10 +1127,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1142,7 +1139,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckService() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1162,12 +1159,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckService.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1180,7 +1177,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1189,15 +1186,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionHealthCheckServiceRequest(), + client.delete_unary( + compute.DeleteRegionHealthCheckServiceRequest(), project="project_value", region="region_value", health_check_service="health_check_service_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1206,108 +1203,76 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionHealthCheckServiceRequest, + compute.GetRegionHealthCheckServiceRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["health_check_service_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "health_status_aggregation_policy": "health_status_aggregation_policy_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "network_endpoint_groups": [ - "network_endpoint_groups_value_1", - "network_endpoint_groups_value_2", - ], - "notification_endpoints": [ - "notification_endpoints_value_1", - "notification_endpoints_value_2", - ], - "region": "region_value", - "self_link": "self_link_value", + request_init = { + "project": "sample1", + "region": "sample2", + "health_check_service": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.HealthCheckService( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", + health_checks=["health_checks_value"], + health_status_aggregation_policy="health_status_aggregation_policy_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + network_endpoint_groups=["network_endpoint_groups_value"], + notification_endpoints=["notification_endpoints_value"], region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.HealthCheckService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.HealthCheckService) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" + assert response.health_checks == ["health_checks_value"] + assert ( + response.health_status_aggregation_policy + == "health_status_aggregation_policy_value" + ) assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.network_endpoint_groups == ["network_endpoint_groups_value"] + assert response.notification_endpoints == ["notification_endpoints_value"] assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionHealthCheckServiceRequest, +def test_get_rest_required_fields( + request_type=compute.GetRegionHealthCheckServiceRequest, ): transport_class = transports.RegionHealthCheckServicesRestTransport request_init = {} + request_init["health_check_service"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1321,22 +1286,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["healthCheckService"] = "health_check_service_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "healthCheckService" in jsonified_request + assert jsonified_request["healthCheckService"] == "health_check_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1349,7 +1315,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.HealthCheckService() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1360,36 +1326,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.HealthCheckService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( - "healthCheckServiceResource", + "healthCheckService", "project", "region", ) @@ -1398,7 +1363,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1411,9 +1376,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthCheckServicesRestInterceptor, "post_insert" + transports.RegionHealthCheckServicesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionHealthCheckServicesRestInterceptor, "pre_insert" + transports.RegionHealthCheckServicesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1428,17 +1393,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.HealthCheckService.to_json( + compute.HealthCheckService() + ) - request = compute.InsertRegionHealthCheckServiceRequest() + request = compute.GetRegionHealthCheckServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.HealthCheckService - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1450,8 +1417,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionHealthCheckServiceRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionHealthCheckServiceRequest ): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1459,26 +1426,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["health_check_service_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "health_status_aggregation_policy": "health_status_aggregation_policy_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "network_endpoint_groups": [ - "network_endpoint_groups_value_1", - "network_endpoint_groups_value_2", - ], - "notification_endpoints": [ - "notification_endpoints_value_1", - "notification_endpoints_value_2", - ], - "region": "region_value", - "self_link": "self_link_value", + request_init = { + "project": "sample1", + "region": "sample2", + "health_check_service": "sample3", } request = request_type(request_init) @@ -1491,10 +1442,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1503,43 +1454,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.HealthCheckService() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "health_check_service": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - health_check_service_resource=compute.HealthCheckService( - creation_timestamp="creation_timestamp_value" - ), + health_check_service="health_check_service_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.HealthCheckService.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices" + "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices/{health_check_service}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1548,17 +1501,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionHealthCheckServiceRequest(), + client.get( + compute.GetRegionHealthCheckServiceRequest(), project="project_value", region="region_value", - health_check_service_resource=compute.HealthCheckService( - creation_timestamp="creation_timestamp_value" - ), + health_check_service="health_check_service_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1567,11 +1518,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionHealthCheckServicesRequest, + compute.InsertRegionHealthCheckServiceRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1579,40 +1530,1151 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "health_status_aggregation_policy": "health_status_aggregation_policy_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network_endpoint_groups": [ + "network_endpoint_groups_value_1", + "network_endpoint_groups_value_2", + ], + "notification_endpoints": [ + "notification_endpoints_value_1", + "notification_endpoints_value_2", + ], + "region": "region_value", + "self_link": "self_link_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckServicesList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionHealthCheckServiceRequest, +): + transport_class = transports.RegionHealthCheckServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionHealthCheckServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "healthCheckServiceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionHealthCheckServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthCheckServicesRestInterceptor(), + ) + client = RegionHealthCheckServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthCheckServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionHealthCheckServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionHealthCheckServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionHealthCheckServiceRequest +): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "health_status_aggregation_policy": "health_status_aggregation_policy_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network_endpoint_groups": [ + "network_endpoint_groups_value_1", + "network_endpoint_groups_value_2", + ], + "notification_endpoints": [ + "notification_endpoints_value_1", + "notification_endpoints_value_2", + ], + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + health_check_service_resource=compute.HealthCheckService( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionHealthCheckServiceRequest(), + project="project_value", + region="region_value", + health_check_service_resource=compute.HealthCheckService( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionHealthCheckServiceRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "health_status_aggregation_policy": "health_status_aggregation_policy_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network_endpoint_groups": [ + "network_endpoint_groups_value_1", + "network_endpoint_groups_value_2", + ], + "notification_endpoints": [ + "notification_endpoints_value_1", + "notification_endpoints_value_2", + ], + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionHealthCheckServiceRequest, +): + transport_class = transports.RegionHealthCheckServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionHealthCheckServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "healthCheckServiceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionHealthCheckServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthCheckServicesRestInterceptor(), + ) + client = RegionHealthCheckServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthCheckServicesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionHealthCheckServicesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionHealthCheckServiceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionHealthCheckServiceRequest +): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "health_status_aggregation_policy": "health_status_aggregation_policy_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network_endpoint_groups": [ + "network_endpoint_groups_value_1", + "network_endpoint_groups_value_2", + ], + "notification_endpoints": [ + "notification_endpoints_value_1", + "notification_endpoints_value_2", + ], + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + health_check_service_resource=compute.HealthCheckService( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionHealthCheckServiceRequest(), + project="project_value", + region="region_value", + health_check_service_resource=compute.HealthCheckService( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionHealthCheckServicesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckServicesList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckServicesList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionHealthCheckServicesRequest, +): + transport_class = transports.RegionHealthCheckServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckServicesList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckServicesList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionHealthCheckServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionHealthCheckServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthCheckServicesRestInterceptor(), + ) + client = RegionHealthCheckServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthCheckServicesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionHealthCheckServicesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.HealthCheckServicesList.to_json( + compute.HealthCheckServicesList() + ) + + request = compute.ListRegionHealthCheckServicesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.HealthCheckServicesList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionHealthCheckServicesRequest +): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckServicesList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckServicesList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionHealthCheckServicesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.HealthCheckServicesList( + items=[ + compute.HealthCheckService(), + compute.HealthCheckService(), + compute.HealthCheckService(), + ], + next_page_token="abc", + ), + compute.HealthCheckServicesList( + items=[], + next_page_token="def", + ), + compute.HealthCheckServicesList( + items=[ + compute.HealthCheckService(), + ], + next_page_token="ghi", + ), + compute.HealthCheckServicesList( + items=[ + compute.HealthCheckService(), + compute.HealthCheckService(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.HealthCheckServicesList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.HealthCheckService) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionHealthCheckServiceRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionHealthCheckServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "health_check_service": "sample3", + } + request_init["health_check_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "health_status_aggregation_policy": "health_status_aggregation_policy_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network_endpoint_groups": [ + "network_endpoint_groups_value_1", + "network_endpoint_groups_value_2", + ], + "notification_endpoints": [ + "notification_endpoints_value_1", + "notification_endpoints_value_2", + ], + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckServicesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListRegionHealthCheckServicesRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchRegionHealthCheckServiceRequest, ): transport_class = transports.RegionHealthCheckServicesRestTransport request_init = {} + request_init["health_check_service"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1626,30 +2688,25 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["healthCheckService"] = "health_check_service_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "healthCheckService" in jsonified_request + assert jsonified_request["healthCheckService"] == "health_check_service_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1662,7 +2719,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckServicesList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1673,42 +2730,37 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckServicesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "healthCheckService", + "healthCheckServiceResource", "project", "region", ) @@ -1717,7 +2769,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.RegionHealthCheckServicesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1730,9 +2782,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthCheckServicesRestInterceptor, "post_list" + transports.RegionHealthCheckServicesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionHealthCheckServicesRestInterceptor, "pre_list" + transports.RegionHealthCheckServicesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1747,19 +2799,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.HealthCheckServicesList.to_json( - compute.HealthCheckServicesList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionHealthCheckServicesRequest() + request = compute.PatchRegionHealthCheckServiceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckServicesList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -1771,8 +2821,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionHealthCheckServicesRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionHealthCheckServiceRequest ): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1780,7 +2830,31 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "health_check_service": "sample3", + } + request_init["health_check_service_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "health_status_aggregation_policy": "health_status_aggregation_policy_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network_endpoint_groups": [ + "network_endpoint_groups_value_1", + "network_endpoint_groups_value_2", + ], + "notification_endpoints": [ + "notification_endpoints_value_1", + "notification_endpoints_value_2", + ], + "region": "region_value", + "self_link": "self_link_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1792,10 +2866,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1804,40 +2878,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckServicesList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "health_check_service": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + health_check_service="health_check_service_value", + health_check_service_resource=compute.HealthCheckService( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckServicesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices" + "%s/compute/v1/projects/{project}/regions/{region}/healthCheckServices/{health_check_service}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = RegionHealthCheckServicesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1846,73 +2928,22 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionHealthCheckServicesRequest(), + client.patch( + compute.PatchRegionHealthCheckServiceRequest(), project="project_value", region="region_value", + health_check_service="health_check_service_value", + health_check_service_resource=compute.HealthCheckService( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = RegionHealthCheckServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.HealthCheckServicesList( - items=[ - compute.HealthCheckService(), - compute.HealthCheckService(), - compute.HealthCheckService(), - ], - next_page_token="abc", - ), - compute.HealthCheckServicesList( - items=[], - next_page_token="def", - ), - compute.HealthCheckServicesList( - items=[ - compute.HealthCheckService(), - ], - next_page_token="ghi", - ), - compute.HealthCheckServicesList( - items=[ - compute.HealthCheckService(), - compute.HealthCheckService(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.HealthCheckServicesList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.HealthCheckService) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -1993,28 +3024,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2369,6 +3378,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionHealthCheckServicesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_health_check_services_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2404,6 +3426,14 @@ def test_region_health_check_services_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_health_check_services_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_health_checks.py b/tests/unit/gapic/compute_v1/test_region_health_checks.py index f32742aec..14b971857 100644 --- a/tests/unit/gapic/compute_v1/test_region_health_checks.py +++ b/tests/unit/gapic/compute_v1/test_region_health_checks.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -547,7 +549,7 @@ def test_region_health_checks_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -595,10 +597,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -623,7 +625,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionHealthCheckRequest, ): transport_class = transports.RegionHealthChecksRestTransport @@ -696,14 +698,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -722,7 +724,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -762,7 +764,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -774,7 +776,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionHealthCheckRequest ): client = RegionHealthChecksClient( @@ -799,10 +801,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -836,7 +838,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -849,7 +851,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -858,7 +860,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionHealthCheckRequest(), project="project_value", region="region_value", @@ -866,7 +868,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -875,11 +877,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionHealthCheckRequest, + compute.DeleteRegionHealthCheckRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -896,46 +898,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheck( - check_interval_sec=1884, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - healthy_threshold=1819, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - timeout_sec=1185, - type_="type__value", - unhealthy_threshold=2046, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheck.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.HealthCheck) - assert response.check_interval_sec == 1884 - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.healthy_threshold == 1819 - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.timeout_sec == 1185 - assert response.type_ == "type__value" - assert response.unhealthy_threshold == 2046 + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionHealthCheckRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionHealthCheckRequest, +): transport_class = transports.RegionHealthChecksRestTransport request_init = {} @@ -953,7 +955,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionHealthCheckReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -964,7 +966,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionHealthCheckReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -982,7 +986,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionHealthCheckReque request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.HealthCheck() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -993,32 +997,32 @@ def test_get_rest_required_fields(request_type=compute.GetRegionHealthCheckReque # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheck.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "healthCheck", @@ -1030,7 +1034,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1043,9 +1047,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "post_get" + transports.RegionHealthChecksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "pre_get" + transports.RegionHealthChecksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1060,17 +1064,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.HealthCheck.to_json(compute.HealthCheck()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionHealthCheckRequest() + request = compute.DeleteRegionHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheck + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1082,8 +1086,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionHealthCheckRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionHealthCheckRequest ): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1107,10 +1111,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1119,7 +1123,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheck() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1139,12 +1143,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheck.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1157,7 +1161,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1166,15 +1170,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionHealthCheckRequest(), + client.delete_unary( + compute.DeleteRegionHealthCheckRequest(), project="project_value", region="region_value", health_check="health_check_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1183,152 +1187,71 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionHealthCheckRequest, + compute.GetRegionHealthCheckRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["health_check_resource"] = { - "check_interval_sec": 1884, - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "grpc_health_check": { - "grpc_service_name": "grpc_service_name_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - }, - "healthy_threshold": 1819, - "http2_health_check": { - "host": "host_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request_path": "request_path_value", - "response": "response_value", - }, - "http_health_check": { - "host": "host_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request_path": "request_path_value", - "response": "response_value", - }, - "https_health_check": { - "host": "host_value", - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request_path": "request_path_value", - "response": "response_value", - }, - "id": 205, - "kind": "kind_value", - "log_config": {"enable": True}, - "name": "name_value", - "region": "region_value", - "self_link": "self_link_value", - "ssl_health_check": { - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request": "request_value", - "response": "response_value", - }, - "tcp_health_check": { - "port": 453, - "port_name": "port_name_value", - "port_specification": "port_specification_value", - "proxy_header": "proxy_header_value", - "request": "request_value", - "response": "response_value", - }, - "timeout_sec": 1185, - "type_": "type__value", - "unhealthy_threshold": 2046, + request_init = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.HealthCheck( + check_interval_sec=1884, creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + healthy_threshold=1819, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + timeout_sec=1185, + type_="type__value", + unhealthy_threshold=2046, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.HealthCheck.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.HealthCheck) + assert response.check_interval_sec == 1884 assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.healthy_threshold == 1819 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.timeout_sec == 1185 + assert response.type_ == "type__value" + assert response.unhealthy_threshold == 2046 -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionHealthCheckRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRegionHealthCheckRequest): transport_class = transports.RegionHealthChecksRestTransport request_init = {} + request_init["health_check"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1342,22 +1265,23 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["healthCheck"] = "health_check_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "healthCheck" in jsonified_request + assert jsonified_request["healthCheck"] == "health_check_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1370,7 +1294,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.HealthCheck() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1381,7 +1305,1617 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheck.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "healthCheck", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthChecksRestInterceptor(), + ) + client = RegionHealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.HealthCheck.to_json(compute.HealthCheck()) + + request = compute.GetRegionHealthCheckRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.HealthCheck + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionHealthCheckRequest +): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheck() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + health_check="health_check_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheck.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthChecks/{health_check}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetRegionHealthCheckRequest(), + project="project_value", + region="region_value", + health_check="health_check_value", + ) + + +def test_get_rest_error(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionHealthCheckRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionHealthCheckRequest, +): + transport_class = transports.RegionHealthChecksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "healthCheckResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthChecksRestInterceptor(), + ) + client = RegionHealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionHealthCheckRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionHealthCheckRequest +): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthChecks" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionHealthCheckRequest(), + project="project_value", + region="region_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + + +def test_insert_rest_error(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionHealthCheckRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionHealthCheckRequest, +): + transport_class = transports.RegionHealthChecksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "healthCheckResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthChecksRestInterceptor(), + ) + client = RegionHealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionHealthCheckRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionHealthCheckRequest +): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthChecks" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionHealthCheckRequest(), + project="project_value", + region="region_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), + ) + + +def test_insert_unary_rest_error(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionHealthChecksRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListRegionHealthChecksRequest): + transport_class = transports.RegionHealthChecksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionHealthChecksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionHealthChecksRestInterceptor(), + ) + client = RegionHealthChecksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionHealthChecksRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.HealthCheckList.to_json( + compute.HealthCheckList() + ) + + request = compute.ListRegionHealthChecksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.HealthCheckList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionHealthChecksRequest +): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.HealthCheckList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.HealthCheckList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/healthChecks" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionHealthChecksRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.HealthCheckList( + items=[ + compute.HealthCheck(), + compute.HealthCheck(), + compute.HealthCheck(), + ], + next_page_token="abc", + ), + compute.HealthCheckList( + items=[], + next_page_token="def", + ), + compute.HealthCheckList( + items=[ + compute.HealthCheck(), + ], + next_page_token="ghi", + ), + compute.HealthCheckList( + items=[ + compute.HealthCheck(), + compute.HealthCheck(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.HealthCheckList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.HealthCheck) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionHealthCheckRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchRegionHealthCheckRequest): + transport_class = transports.RegionHealthChecksRestTransport + + request_init = {} + request_init["health_check"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["healthCheck"] = "health_check_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "healthCheck" in jsonified_request + assert jsonified_request["healthCheck"] == "health_check_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionHealthChecksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -1393,23 +2927,24 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( + "healthCheck", "healthCheckResource", "project", "region", @@ -1419,7 +2954,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1432,9 +2967,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "post_insert" + transports.RegionHealthChecksRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "pre_insert" + transports.RegionHealthChecksRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1451,7 +2986,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertRegionHealthCheckRequest() + request = compute.PatchRegionHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1459,7 +2994,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.patch( request, metadata=[ ("key", "val"), @@ -1471,8 +3006,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionHealthCheckRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionHealthCheckRequest ): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1480,7 +3015,11 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } request_init["health_check_resource"] = { "check_interval_sec": 1884, "creation_timestamp": "creation_timestamp_value", @@ -1556,10 +3095,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1571,12 +3110,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + health_check="health_check_value", health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) mock_args.update(sample_request) @@ -1589,20 +3133,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/healthChecks" + "%s/compute/v1/projects/{project}/regions/{region}/healthChecks/{health_check}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1611,15 +3155,16 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionHealthCheckRequest(), + client.patch( + compute.PatchRegionHealthCheckRequest(), project="project_value", region="region_value", + health_check="health_check_value", health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1628,50 +3173,135 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionHealthChecksRequest, + compute.PatchRegionHealthCheckRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListRegionHealthChecksRequest): +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionHealthCheckRequest, +): transport_class = transports.RegionHealthChecksRestTransport request_init = {} + request_init["health_check"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -1685,30 +3315,25 @@ def test_list_rest_required_fields(request_type=compute.ListRegionHealthChecksRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["healthCheck"] = "health_check_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "healthCheck" in jsonified_request + assert jsonified_request["healthCheck"] == "health_check_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1721,7 +3346,7 @@ def test_list_rest_required_fields(request_type=compute.ListRegionHealthChecksRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1732,42 +3357,37 @@ def test_list_rest_required_fields(request_type=compute.ListRegionHealthChecksRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.list._get_unset_required_fields({}) - assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) & set( ( + "healthCheck", + "healthCheckResource", "project", "region", ) @@ -1776,7 +3396,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1789,9 +3409,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "post_list" + transports.RegionHealthChecksRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "pre_list" + transports.RegionHealthChecksRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1806,19 +3426,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.HealthCheckList.to_json( - compute.HealthCheckList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionHealthChecksRequest() + request = compute.PatchRegionHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -1830,8 +3448,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionHealthChecksRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionHealthCheckRequest ): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1839,7 +3457,75 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } + request_init["health_check_resource"] = { + "check_interval_sec": 1884, + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_health_check": { + "grpc_service_name": "grpc_service_name_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + }, + "healthy_threshold": 1819, + "http2_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "http_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "https_health_check": { + "host": "host_value", + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request_path": "request_path_value", + "response": "response_value", + }, + "id": 205, + "kind": "kind_value", + "log_config": {"enable": True}, + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "ssl_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "tcp_health_check": { + "port": 453, + "port_name": "port_name_value", + "port_specification": "port_specification_value", + "proxy_header": "proxy_header_value", + "request": "request_value", + "response": "response_value", + }, + "timeout_sec": 1185, + "type_": "type__value", + "unhealthy_threshold": 2046, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1851,10 +3537,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1863,40 +3549,46 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.HealthCheckList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "health_check": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + health_check="health_check_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.HealthCheckList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/healthChecks" + "%s/compute/v1/projects/{project}/regions/{region}/healthChecks/{health_check}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1905,82 +3597,29 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionHealthChecksRequest(), + client.patch_unary( + compute.PatchRegionHealthCheckRequest(), project="project_value", region="region_value", + health_check="health_check_value", + health_check_resource=compute.HealthCheck(check_interval_sec=1884), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = RegionHealthChecksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.HealthCheckList( - items=[ - compute.HealthCheck(), - compute.HealthCheck(), - compute.HealthCheck(), - ], - next_page_token="abc", - ), - compute.HealthCheckList( - items=[], - next_page_token="def", - ), - compute.HealthCheckList( - items=[ - compute.HealthCheck(), - ], - next_page_token="ghi", - ), - compute.HealthCheckList( - items=[ - compute.HealthCheck(), - compute.HealthCheck(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.HealthCheckList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.HealthCheck) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionHealthCheckRequest, + compute.UpdateRegionHealthCheckRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2092,10 +3731,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2120,8 +3759,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionHealthCheckRequest, +def test_update_rest_required_fields( + request_type=compute.UpdateRegionHealthCheckRequest, ): transport_class = transports.RegionHealthChecksRestTransport @@ -2140,7 +3779,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2151,7 +3790,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2182,7 +3821,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2194,19 +3833,19 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -2221,7 +3860,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.RegionHealthChecksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2234,9 +3873,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "post_patch" + transports.RegionHealthChecksRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.RegionHealthChecksRestInterceptor, "pre_patch" + transports.RegionHealthChecksRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2253,7 +3892,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRegionHealthCheckRequest() + request = compute.UpdateRegionHealthCheckRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2261,7 +3900,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2273,8 +3912,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRegionHealthCheckRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateRegionHealthCheckRequest ): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2362,10 +4001,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2400,7 +4039,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2413,7 +4052,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2422,8 +4061,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionHealthCheckRequest(), + client.update( + compute.UpdateRegionHealthCheckRequest(), project="project_value", region="region_value", health_check="health_check_value", @@ -2431,7 +4070,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = RegionHealthChecksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2560,28 +4199,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -2976,6 +4593,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionHealthChecksClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_health_checks_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3012,6 +4642,14 @@ def test_region_health_checks_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_health_checks_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_instance_group_managers.py b/tests/unit/gapic/compute_v1/test_region_instance_group_managers.py index 1337bca92..de1866da3 100644 --- a/tests/unit/gapic/compute_v1/test_region_instance_group_managers.py +++ b/tests/unit/gapic/compute_v1/test_region_instance_group_managers.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -563,7 +565,7 @@ def test_region_instance_group_managers_client_client_options_credentials_file( dict, ], ) -def test_abandon_instances_unary_rest(request_type): +def test_abandon_instances_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -614,10 +616,10 @@ def test_abandon_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.abandon_instances_unary(request) + response = client.abandon_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -642,7 +644,7 @@ def test_abandon_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_abandon_instances_unary_rest_required_fields( +def test_abandon_instances_rest_required_fields( request_type=compute.AbandonInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -716,14 +718,14 @@ def test_abandon_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.abandon_instances_unary(request) + response = client.abandon_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_abandon_instances_unary_rest_unset_required_fields(): +def test_abandon_instances_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -743,7 +745,7 @@ def test_abandon_instances_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_abandon_instances_unary_rest_interceptors(null_interceptor): +def test_abandon_instances_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -783,7 +785,7 @@ def test_abandon_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.abandon_instances_unary( + client.abandon_instances( request, metadata=[ ("key", "val"), @@ -795,7 +797,7 @@ def test_abandon_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_abandon_instances_unary_rest_bad_request( +def test_abandon_instances_rest_bad_request( transport: str = "rest", request_type=compute.AbandonInstancesRegionInstanceGroupManagerRequest, ): @@ -824,10 +826,10 @@ def test_abandon_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.abandon_instances_unary(request) + client.abandon_instances(request) -def test_abandon_instances_unary_rest_flattened(): +def test_abandon_instances_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -864,7 +866,7 @@ def test_abandon_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.abandon_instances_unary(**mock_args) + client.abandon_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -877,7 +879,7 @@ def test_abandon_instances_unary_rest_flattened(): ) -def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_abandon_instances_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -886,7 +888,7 @@ def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.abandon_instances_unary( + client.abandon_instances( compute.AbandonInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", @@ -897,7 +899,7 @@ def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): ) -def test_abandon_instances_unary_rest_error(): +def test_abandon_instances_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -906,11 +908,11 @@ def test_abandon_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, + compute.AbandonInstancesRegionInstanceGroupManagerRequest, dict, ], ) -def test_apply_updates_to_instances_unary_rest(request_type): +def test_abandon_instances_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -922,12 +924,9 @@ def test_apply_updates_to_instances_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_apply_updates_request_resource"] = { - "all_instances": True, - "instances": ["instances_value_1", "instances_value_2"], - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - } + request_init[ + "region_instance_group_managers_abandon_instances_request_resource" + ] = {"instances": ["instances_value_1", "instances_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -964,36 +963,14 @@ def test_apply_updates_to_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.apply_updates_to_instances_unary(request) + response = client.abandon_instances_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_apply_updates_to_instances_unary_rest_required_fields( - request_type=compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, +def test_abandon_instances_unary_rest_required_fields( + request_type=compute.AbandonInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -1012,7 +989,7 @@ def test_apply_updates_to_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) + ).abandon_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1023,7 +1000,9 @@ def test_apply_updates_to_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) + ).abandon_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1064,34 +1043,34 @@ def test_apply_updates_to_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.apply_updates_to_instances_unary(request) + response = client.abandon_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_apply_updates_to_instances_unary_rest_unset_required_fields(): +def test_abandon_instances_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.apply_updates_to_instances._get_unset_required_fields({}) + unset_fields = transport.abandon_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceGroupManager", "project", "region", - "regionInstanceGroupManagersApplyUpdatesRequestResource", + "regionInstanceGroupManagersAbandonInstancesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): +def test_abandon_instances_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1104,11 +1083,9 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, - "post_apply_updates_to_instances", + transports.RegionInstanceGroupManagersRestInterceptor, "post_abandon_instances" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, - "pre_apply_updates_to_instances", + transports.RegionInstanceGroupManagersRestInterceptor, "pre_abandon_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1125,7 +1102,7 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest() + request = compute.AbandonInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1133,7 +1110,7 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.apply_updates_to_instances_unary( + client.abandon_instances_unary( request, metadata=[ ("key", "val"), @@ -1145,9 +1122,9 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_apply_updates_to_instances_unary_rest_bad_request( +def test_abandon_instances_unary_rest_bad_request( transport: str = "rest", - request_type=compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, + request_type=compute.AbandonInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1160,12 +1137,9 @@ def test_apply_updates_to_instances_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_apply_updates_request_resource"] = { - "all_instances": True, - "instances": ["instances_value_1", "instances_value_2"], - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - } + request_init[ + "region_instance_group_managers_abandon_instances_request_resource" + ] = {"instances": ["instances_value_1", "instances_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1177,10 +1151,10 @@ def test_apply_updates_to_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.apply_updates_to_instances_unary(request) + client.abandon_instances_unary(request) -def test_apply_updates_to_instances_unary_rest_flattened(): +def test_abandon_instances_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1203,8 +1177,8 @@ def test_apply_updates_to_instances_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_apply_updates_request_resource=compute.RegionInstanceGroupManagersApplyUpdatesRequest( - all_instances=True + region_instance_group_managers_abandon_instances_request_resource=compute.RegionInstanceGroupManagersAbandonInstancesRequest( + instances=["instances_value"] ), ) mock_args.update(sample_request) @@ -1217,20 +1191,20 @@ def test_apply_updates_to_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.apply_updates_to_instances_unary(**mock_args) + client.abandon_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/applyUpdatesToInstances" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/abandonInstances" % client.transport._host, args[1], ) -def test_apply_updates_to_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_abandon_instances_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1239,18 +1213,18 @@ def test_apply_updates_to_instances_unary_rest_flattened_error(transport: str = # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.apply_updates_to_instances_unary( - compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest(), + client.abandon_instances_unary( + compute.AbandonInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_apply_updates_request_resource=compute.RegionInstanceGroupManagersApplyUpdatesRequest( - all_instances=True + region_instance_group_managers_abandon_instances_request_resource=compute.RegionInstanceGroupManagersAbandonInstancesRequest( + instances=["instances_value"] ), ) -def test_apply_updates_to_instances_unary_rest_error(): +def test_abandon_instances_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1259,11 +1233,11 @@ def test_apply_updates_to_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.CreateInstancesRegionInstanceGroupManagerRequest, + compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict, ], ) -def test_create_instances_unary_rest(request_type): +def test_apply_updates_to_instances_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1275,15 +1249,11 @@ def test_create_instances_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_create_instances_request_resource"] = { - "instances": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["region_instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", } request = request_type(request_init) @@ -1321,10 +1291,10 @@ def test_create_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_instances_unary(request) + response = client.apply_updates_to_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1349,8 +1319,8 @@ def test_create_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_create_instances_unary_rest_required_fields( - request_type=compute.CreateInstancesRegionInstanceGroupManagerRequest, +def test_apply_updates_to_instances_rest_required_fields( + request_type=compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -1369,7 +1339,7 @@ def test_create_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_instances._get_unset_required_fields(jsonified_request) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1380,9 +1350,7 @@ def test_create_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_instances._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1423,34 +1391,34 @@ def test_create_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_instances_unary(request) + response = client.apply_updates_to_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_instances_unary_rest_unset_required_fields(): +def test_apply_updates_to_instances_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_instances._get_unset_required_fields({}) + unset_fields = transport.apply_updates_to_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instanceGroupManager", "project", "region", - "regionInstanceGroupManagersCreateInstancesRequestResource", + "regionInstanceGroupManagersApplyUpdatesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_instances_unary_rest_interceptors(null_interceptor): +def test_apply_updates_to_instances_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1463,9 +1431,11 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_create_instances" + transports.RegionInstanceGroupManagersRestInterceptor, + "post_apply_updates_to_instances", ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_create_instances" + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_apply_updates_to_instances", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1482,7 +1452,7 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.CreateInstancesRegionInstanceGroupManagerRequest() + request = compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1490,7 +1460,7 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.create_instances_unary( + client.apply_updates_to_instances( request, metadata=[ ("key", "val"), @@ -1502,9 +1472,9 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_instances_unary_rest_bad_request( +def test_apply_updates_to_instances_rest_bad_request( transport: str = "rest", - request_type=compute.CreateInstancesRegionInstanceGroupManagerRequest, + request_type=compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1517,15 +1487,11 @@ def test_create_instances_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_create_instances_request_resource"] = { - "instances": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["region_instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", } request = request_type(request_init) @@ -1538,10 +1504,10 @@ def test_create_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_instances_unary(request) + client.apply_updates_to_instances(request) -def test_create_instances_unary_rest_flattened(): +def test_apply_updates_to_instances_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1564,8 +1530,8 @@ def test_create_instances_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_create_instances_request_resource=compute.RegionInstanceGroupManagersCreateInstancesRequest( - instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] + region_instance_group_managers_apply_updates_request_resource=compute.RegionInstanceGroupManagersApplyUpdatesRequest( + all_instances=True ), ) mock_args.update(sample_request) @@ -1578,20 +1544,20 @@ def test_create_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_instances_unary(**mock_args) + client.apply_updates_to_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/createInstances" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/applyUpdatesToInstances" % client.transport._host, args[1], ) -def test_create_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_apply_updates_to_instances_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1600,18 +1566,18 @@ def test_create_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_instances_unary( - compute.CreateInstancesRegionInstanceGroupManagerRequest(), + client.apply_updates_to_instances( + compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_create_instances_request_resource=compute.RegionInstanceGroupManagersCreateInstancesRequest( - instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] + region_instance_group_managers_apply_updates_request_resource=compute.RegionInstanceGroupManagersApplyUpdatesRequest( + all_instances=True ), ) -def test_create_instances_unary_rest_error(): +def test_apply_updates_to_instances_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1620,11 +1586,11 @@ def test_create_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteRegionInstanceGroupManagerRequest, + compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_apply_updates_to_instances_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1636,6 +1602,12 @@ def test_delete_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } + request_init["region_instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1672,36 +1644,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.apply_updates_to_instances_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteRegionInstanceGroupManagerRequest, +def test_apply_updates_to_instances_unary_rest_required_fields( + request_type=compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -1720,7 +1670,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1731,9 +1681,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).apply_updates_to_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1762,9 +1710,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1773,33 +1722,34 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.apply_updates_to_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_apply_updates_to_instances_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.apply_updates_to_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instanceGroupManager", "project", "region", + "regionInstanceGroupManagersApplyUpdatesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1812,9 +1762,11 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_delete" + transports.RegionInstanceGroupManagersRestInterceptor, + "post_apply_updates_to_instances", ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_delete" + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_apply_updates_to_instances", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1831,7 +1783,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteRegionInstanceGroupManagerRequest() + request = compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1839,7 +1791,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.apply_updates_to_instances_unary( request, metadata=[ ("key", "val"), @@ -1851,9 +1803,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_apply_updates_to_instances_unary_rest_bad_request( transport: str = "rest", - request_type=compute.DeleteRegionInstanceGroupManagerRequest, + request_type=compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1866,6 +1818,12 @@ def test_delete_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } + request_init["region_instance_group_managers_apply_updates_request_resource"] = { + "all_instances": True, + "instances": ["instances_value_1", "instances_value_2"], + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1877,10 +1835,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.apply_updates_to_instances_unary(request) -def test_delete_unary_rest_flattened(): +def test_apply_updates_to_instances_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1903,6 +1861,9 @@ def test_delete_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_managers_apply_updates_request_resource=compute.RegionInstanceGroupManagersApplyUpdatesRequest( + all_instances=True + ), ) mock_args.update(sample_request) @@ -1914,20 +1875,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.apply_updates_to_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/applyUpdatesToInstances" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_apply_updates_to_instances_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1936,15 +1897,18 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRegionInstanceGroupManagerRequest(), + client.apply_updates_to_instances_unary( + compute.ApplyUpdatesToInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_managers_apply_updates_request_resource=compute.RegionInstanceGroupManagersApplyUpdatesRequest( + all_instances=True + ), ) -def test_delete_unary_rest_error(): +def test_apply_updates_to_instances_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1953,11 +1917,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteInstancesRegionInstanceGroupManagerRequest, + compute.CreateInstancesRegionInstanceGroupManagerRequest, dict, ], ) -def test_delete_instances_unary_rest(request_type): +def test_create_instances_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1969,9 +1933,15 @@ def test_delete_instances_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_delete_instances_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"], - "skip_instances_on_validation_error": True, + request_init["region_instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -2009,10 +1979,10 @@ def test_delete_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_instances_unary(request) + response = client.create_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2037,8 +2007,8 @@ def test_delete_instances_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_instances_unary_rest_required_fields( - request_type=compute.DeleteInstancesRegionInstanceGroupManagerRequest, +def test_create_instances_rest_required_fields( + request_type=compute.CreateInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -2057,7 +2027,7 @@ def test_delete_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_instances._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2068,7 +2038,7 @@ def test_delete_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_instances._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2111,19 +2081,19 @@ def test_delete_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_instances_unary(request) + response = client.create_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_instances_unary_rest_unset_required_fields(): +def test_create_instances_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_instances._get_unset_required_fields({}) + unset_fields = transport.create_instances._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -2131,14 +2101,14 @@ def test_delete_instances_unary_rest_unset_required_fields(): "instanceGroupManager", "project", "region", - "regionInstanceGroupManagersDeleteInstancesRequestResource", + "regionInstanceGroupManagersCreateInstancesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_instances_unary_rest_interceptors(null_interceptor): +def test_create_instances_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2151,9 +2121,9 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_delete_instances" + transports.RegionInstanceGroupManagersRestInterceptor, "post_create_instances" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_delete_instances" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_create_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2170,7 +2140,7 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteInstancesRegionInstanceGroupManagerRequest() + request = compute.CreateInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2178,7 +2148,7 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_instances_unary( + client.create_instances( request, metadata=[ ("key", "val"), @@ -2190,9 +2160,9 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_instances_unary_rest_bad_request( +def test_create_instances_rest_bad_request( transport: str = "rest", - request_type=compute.DeleteInstancesRegionInstanceGroupManagerRequest, + request_type=compute.CreateInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2205,9 +2175,15 @@ def test_delete_instances_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_delete_instances_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"], - "skip_instances_on_validation_error": True, + request_init["region_instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -2220,10 +2196,10 @@ def test_delete_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_instances_unary(request) + client.create_instances(request) -def test_delete_instances_unary_rest_flattened(): +def test_create_instances_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2246,8 +2222,8 @@ def test_delete_instances_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_delete_instances_request_resource=compute.RegionInstanceGroupManagersDeleteInstancesRequest( - instances=["instances_value"] + region_instance_group_managers_create_instances_request_resource=compute.RegionInstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) mock_args.update(sample_request) @@ -2260,20 +2236,20 @@ def test_delete_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_instances_unary(**mock_args) + client.create_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/deleteInstances" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/createInstances" % client.transport._host, args[1], ) -def test_delete_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_create_instances_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2282,18 +2258,18 @@ def test_delete_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_instances_unary( - compute.DeleteInstancesRegionInstanceGroupManagerRequest(), + client.create_instances( + compute.CreateInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_delete_instances_request_resource=compute.RegionInstanceGroupManagersDeleteInstancesRequest( - instances=["instances_value"] + region_instance_group_managers_create_instances_request_resource=compute.RegionInstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) -def test_delete_instances_unary_rest_error(): +def test_create_instances_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2302,11 +2278,11 @@ def test_delete_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, + compute.CreateInstancesRegionInstanceGroupManagerRequest, dict, ], ) -def test_delete_per_instance_configs_unary_rest(request_type): +def test_create_instances_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2318,9 +2294,16 @@ def test_delete_per_instance_configs_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init[ - "region_instance_group_manager_delete_instance_config_req_resource" - ] = {"names": ["names_value_1", "names_value_2"]} + request_init["region_instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2357,36 +2340,14 @@ def test_delete_per_instance_configs_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_per_instance_configs_unary(request) + response = client.create_instances_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_per_instance_configs_unary_rest_required_fields( - request_type=compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, +def test_create_instances_unary_rest_required_fields( + request_type=compute.CreateInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -2405,7 +2366,7 @@ def test_delete_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2416,7 +2377,9 @@ def test_delete_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) + ).create_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2457,34 +2420,34 @@ def test_delete_per_instance_configs_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_per_instance_configs_unary(request) + response = client.create_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_per_instance_configs_unary_rest_unset_required_fields(): +def test_create_instances_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_per_instance_configs._get_unset_required_fields({}) + unset_fields = transport.create_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceGroupManager", "project", "region", - "regionInstanceGroupManagerDeleteInstanceConfigReqResource", + "regionInstanceGroupManagersCreateInstancesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): +def test_create_instances_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2497,11 +2460,9 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, - "post_delete_per_instance_configs", + transports.RegionInstanceGroupManagersRestInterceptor, "post_create_instances" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, - "pre_delete_per_instance_configs", + transports.RegionInstanceGroupManagersRestInterceptor, "pre_create_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2518,7 +2479,7 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest() + request = compute.CreateInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2526,7 +2487,7 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_per_instance_configs_unary( + client.create_instances_unary( request, metadata=[ ("key", "val"), @@ -2538,9 +2499,9 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_per_instance_configs_unary_rest_bad_request( +def test_create_instances_unary_rest_bad_request( transport: str = "rest", - request_type=compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, + request_type=compute.CreateInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2553,9 +2514,16 @@ def test_delete_per_instance_configs_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init[ - "region_instance_group_manager_delete_instance_config_req_resource" - ] = {"names": ["names_value_1", "names_value_2"]} + request_init["region_instance_group_managers_create_instances_request_resource"] = { + "instances": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2567,10 +2535,10 @@ def test_delete_per_instance_configs_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_per_instance_configs_unary(request) + client.create_instances_unary(request) -def test_delete_per_instance_configs_unary_rest_flattened(): +def test_create_instances_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2593,8 +2561,8 @@ def test_delete_per_instance_configs_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_manager_delete_instance_config_req_resource=compute.RegionInstanceGroupManagerDeleteInstanceConfigReq( - names=["names_value"] + region_instance_group_managers_create_instances_request_resource=compute.RegionInstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) mock_args.update(sample_request) @@ -2607,22 +2575,20 @@ def test_delete_per_instance_configs_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_per_instance_configs_unary(**mock_args) + client.create_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/deletePerInstanceConfigs" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/createInstances" % client.transport._host, args[1], ) -def test_delete_per_instance_configs_unary_rest_flattened_error( - transport: str = "rest", -): +def test_create_instances_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2631,18 +2597,18 @@ def test_delete_per_instance_configs_unary_rest_flattened_error( # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_per_instance_configs_unary( - compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest(), + client.create_instances_unary( + compute.CreateInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_manager_delete_instance_config_req_resource=compute.RegionInstanceGroupManagerDeleteInstanceConfigReq( - names=["names_value"] + region_instance_group_managers_create_instances_request_resource=compute.RegionInstanceGroupManagersCreateInstancesRequest( + instances=[compute.PerInstanceConfig(fingerprint="fingerprint_value")] ), ) -def test_delete_per_instance_configs_unary_rest_error(): +def test_create_instances_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2651,11 +2617,11 @@ def test_delete_per_instance_configs_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionInstanceGroupManagerRequest, + compute.DeleteRegionInstanceGroupManagerRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2672,51 +2638,67 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManager( - base_instance_name="base_instance_name_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - instance_group="instance_group_value", - instance_template="instance_template_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - target_pools=["target_pools_value"], - target_size=1185, - zone="zone_value", - ) - - # Wrap the value into a proper Response obj + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManager.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.InstanceGroupManager) - assert response.base_instance_name == "base_instance_name_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.instance_group == "instance_group_value" - assert response.instance_template == "instance_template_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.target_pools == ["target_pools_value"] - assert response.target_size == 1185 + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields( - request_type=compute.GetRegionInstanceGroupManagerRequest, +def test_delete_rest_required_fields( + request_type=compute.DeleteRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -2735,7 +2717,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2746,7 +2728,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2764,7 +2748,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManager() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2775,32 +2759,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManager.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "instanceGroupManager", @@ -2812,7 +2796,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2825,9 +2809,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_get" + transports.RegionInstanceGroupManagersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_get" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2842,19 +2826,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.InstanceGroupManager.to_json( - compute.InstanceGroupManager() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionInstanceGroupManagerRequest() + request = compute.DeleteRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManager + post.return_value = compute.Operation - client.get( + client.delete( request, metadata=[ ("key", "val"), @@ -2866,8 +2848,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionInstanceGroupManagerRequest +def test_delete_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2891,10 +2874,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete(request) -def test_get_rest_flattened(): +def test_delete_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2903,7 +2886,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.InstanceGroupManager() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -2923,12 +2906,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.InstanceGroupManager.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2941,7 +2924,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2950,15 +2933,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionInstanceGroupManagerRequest(), + client.delete( + compute.DeleteRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", ) -def test_get_rest_error(): +def test_delete_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2967,82 +2950,21 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionInstanceGroupManagerRequest, + compute.DeleteRegionInstanceGroupManagerRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["instance_group_manager_resource"] = { - "auto_healing_policies": [ - {"health_check": "health_check_value", "initial_delay_sec": 1778} - ], - "base_instance_name": "base_instance_name_value", - "creation_timestamp": "creation_timestamp_value", - "current_actions": { - "abandoning": 1041, - "creating": 845, - "creating_without_retries": 2589, - "deleting": 844, - "none": 432, - "recreating": 1060, - "refreshing": 1069, - "restarting": 1091, - "resuming": 874, - "starting": 876, - "stopping": 884, - "suspending": 1088, - "verifying": 979, - }, - "description": "description_value", - "distribution_policy": { - "target_shape": "target_shape_value", - "zones": [{"zone": "zone_value"}], - }, - "fingerprint": "fingerprint_value", - "id": 205, - "instance_group": "instance_group_value", - "instance_template": "instance_template_value", - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "region": "region_value", - "self_link": "self_link_value", - "stateful_policy": {"preserved_state": {"disks": {}}}, - "status": { - "autoscaler": "autoscaler_value", - "is_stable": True, - "stateful": { - "has_stateful_config": True, - "per_instance_configs": {"all_effective": True}, - }, - "version_target": {"is_reached": True}, - }, - "target_pools": ["target_pools_value_1", "target_pools_value_2"], - "target_size": 1185, - "update_policy": { - "instance_redistribution_type": "instance_redistribution_type_value", - "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, - "max_unavailable": {}, - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - "replacement_method": "replacement_method_value", - "type_": "type__value", - }, - "versions": [ - { - "instance_template": "instance_template_value", - "name": "name_value", - "target_size": {}, - } - ], - "zone": "zone_value", + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", } request = request_type(request_init) @@ -3080,40 +3002,19 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionInstanceGroupManagerRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport request_init = {} + request_init["instance_group_manager"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -3127,22 +3028,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -3166,10 +3070,9 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3178,24 +3081,24 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "instanceGroupManagerResource", + "instanceGroupManager", "project", "region", ) @@ -3204,7 +3107,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3217,9 +3120,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_insert" + transports.RegionInstanceGroupManagersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_insert" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3236,7 +3139,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertRegionInstanceGroupManagerRequest() + request = compute.DeleteRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3244,7 +3147,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -3256,9 +3159,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( +def test_delete_unary_rest_bad_request( transport: str = "rest", - request_type=compute.InsertRegionInstanceGroupManagerRequest, + request_type=compute.DeleteRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3266,71 +3169,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["instance_group_manager_resource"] = { - "auto_healing_policies": [ - {"health_check": "health_check_value", "initial_delay_sec": 1778} - ], - "base_instance_name": "base_instance_name_value", - "creation_timestamp": "creation_timestamp_value", - "current_actions": { - "abandoning": 1041, - "creating": 845, - "creating_without_retries": 2589, - "deleting": 844, - "none": 432, - "recreating": 1060, - "refreshing": 1069, - "restarting": 1091, - "resuming": 874, - "starting": 876, - "stopping": 884, - "suspending": 1088, - "verifying": 979, - }, - "description": "description_value", - "distribution_policy": { - "target_shape": "target_shape_value", - "zones": [{"zone": "zone_value"}], - }, - "fingerprint": "fingerprint_value", - "id": 205, - "instance_group": "instance_group_value", - "instance_template": "instance_template_value", - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "region": "region_value", - "self_link": "self_link_value", - "stateful_policy": {"preserved_state": {"disks": {}}}, - "status": { - "autoscaler": "autoscaler_value", - "is_stable": True, - "stateful": { - "has_stateful_config": True, - "per_instance_configs": {"all_effective": True}, - }, - "version_target": {"is_reached": True}, - }, - "target_pools": ["target_pools_value_1", "target_pools_value_2"], - "target_size": 1185, - "update_policy": { - "instance_redistribution_type": "instance_redistribution_type_value", - "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, - "max_unavailable": {}, - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - "replacement_method": "replacement_method_value", - "type_": "type__value", - }, - "versions": [ - { - "instance_template": "instance_template_value", - "name": "name_value", - "target_size": {}, - } - ], - "zone": "zone_value", + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", } request = request_type(request_init) @@ -3343,10 +3185,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3358,19 +3200,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + instance_group_manager="instance_group_manager_value", ) mock_args.update(sample_request) @@ -3382,20 +3222,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3404,21 +3244,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionInstanceGroupManagerRequest(), + client.delete_unary( + compute.DeleteRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + instance_group_manager="instance_group_manager_value", ) -def test_insert_unary_rest_error(): +def test_delete_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3427,52 +3261,97 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionInstanceGroupManagersRequest, + compute.DeleteInstancesRegionInstanceGroupManagerRequest, dict, ], ) -def test_list_rest(request_type): +def test_delete_instances_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagerList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionInstanceGroupManagerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.delete_instances(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListRegionInstanceGroupManagersRequest, +def test_delete_instances_rest_required_fields( + request_type=compute.DeleteInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport request_init = {} + request_init["instance_group_manager"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -3486,30 +3365,25 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -3522,7 +3396,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagerList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3533,53 +3407,46 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionInstanceGroupManagerList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.delete_instances(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_delete_instances_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.delete_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( + "instanceGroupManager", "project", "region", + "regionInstanceGroupManagersDeleteInstancesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_delete_instances_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3592,9 +3459,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_list" + transports.RegionInstanceGroupManagersRestInterceptor, "post_delete_instances" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_list" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_delete_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3609,19 +3476,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.RegionInstanceGroupManagerList.to_json( - compute.RegionInstanceGroupManagerList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionInstanceGroupManagersRequest() + request = compute.DeleteInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagerList + post.return_value = compute.Operation - client.list( + client.delete_instances( request, metadata=[ ("key", "val"), @@ -3633,8 +3498,9 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionInstanceGroupManagersRequest +def test_delete_instances_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3642,7 +3508,15 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3654,10 +3528,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.delete_instances(request) -def test_list_rest_flattened(): +def test_delete_instances_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3666,40 +3540,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagerList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_managers_delete_instances_request_resource=compute.RegionInstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionInstanceGroupManagerList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.delete_instances(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/deleteInstances" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_delete_instances_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3708,87 +3590,34 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionInstanceGroupManagersRequest(), + client.delete_instances( + compute.DeleteInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_managers_delete_instances_request_resource=compute.RegionInstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_delete_instances_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteInstancesRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_delete_instances_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.RegionInstanceGroupManagerList( - items=[ - compute.InstanceGroupManager(), - compute.InstanceGroupManager(), - compute.InstanceGroupManager(), - ], - next_page_token="abc", - ), - compute.RegionInstanceGroupManagerList( - items=[], - next_page_token="def", - ), - compute.RegionInstanceGroupManagerList( - items=[ - compute.InstanceGroupManager(), - ], - next_page_token="ghi", - ), - compute.RegionInstanceGroupManagerList( - items=[ - compute.InstanceGroupManager(), - compute.InstanceGroupManager(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.RegionInstanceGroupManagerList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InstanceGroupManager) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize( - "request_type", - [ - compute.ListErrorsRegionInstanceGroupManagersRequest, - dict, - ], -) -def test_list_errors_rest(request_type): - client = RegionInstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport="rest", ) # send a request that will satisfy transcoding @@ -3797,32 +3626,54 @@ def test_list_errors_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } + request_init["region_instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListErrorsResponse( - next_page_token="next_page_token_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListErrorsResponse.to_json(return_value) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_errors(request) + response = client.delete_instances_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListErrorsPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, compute.Operation) -def test_list_errors_rest_required_fields( - request_type=compute.ListErrorsRegionInstanceGroupManagersRequest, +def test_delete_instances_unary_rest_required_fields( + request_type=compute.DeleteInstancesRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -3841,7 +3692,7 @@ def test_list_errors_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_errors._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3852,17 +3703,9 @@ def test_list_errors_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_errors._get_unset_required_fields(jsonified_request) + ).delete_instances._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3880,7 +3723,7 @@ def test_list_errors_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListErrorsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3891,56 +3734,46 @@ def test_list_errors_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListErrorsResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_errors(request) + response = client.delete_instances_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_errors_rest_unset_required_fields(): +def test_delete_instances_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_errors._get_unset_required_fields({}) + unset_fields = transport.delete_instances._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "instanceGroupManager", "project", "region", + "regionInstanceGroupManagersDeleteInstancesRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_errors_rest_interceptors(null_interceptor): +def test_delete_instances_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3953,9 +3786,9 @@ def test_list_errors_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_list_errors" + transports.RegionInstanceGroupManagersRestInterceptor, "post_delete_instances" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_list_errors" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_delete_instances" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3970,21 +3803,17 @@ def test_list_errors_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.RegionInstanceGroupManagersListErrorsResponse.to_json( - compute.RegionInstanceGroupManagersListErrorsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListErrorsRegionInstanceGroupManagersRequest() + request = compute.DeleteInstancesRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagersListErrorsResponse + post.return_value = compute.Operation - client.list_errors( + client.delete_instances_unary( request, metadata=[ ("key", "val"), @@ -3996,9 +3825,9 @@ def test_list_errors_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_errors_rest_bad_request( +def test_delete_instances_unary_rest_bad_request( transport: str = "rest", - request_type=compute.ListErrorsRegionInstanceGroupManagersRequest, + request_type=compute.DeleteInstancesRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4011,6 +3840,10 @@ def test_list_errors_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } + request_init["region_instance_group_managers_delete_instances_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"], + "skip_instances_on_validation_error": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4022,10 +3855,10 @@ def test_list_errors_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_errors(request) + client.delete_instances_unary(request) -def test_list_errors_rest_flattened(): +def test_delete_instances_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4034,7 +3867,7 @@ def test_list_errors_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListErrorsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4048,33 +3881,34 @@ def test_list_errors_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_managers_delete_instances_request_resource=compute.RegionInstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListErrorsResponse.to_json(return_value) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_errors(**mock_args) + client.delete_instances_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/listErrors" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/deleteInstances" % client.transport._host, args[1], ) -def test_list_errors_rest_flattened_error(transport: str = "rest"): +def test_delete_instances_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4083,129 +3917,111 @@ def test_list_errors_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_errors( - compute.ListErrorsRegionInstanceGroupManagersRequest(), + client.delete_instances_unary( + compute.DeleteInstancesRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_managers_delete_instances_request_resource=compute.RegionInstanceGroupManagersDeleteInstancesRequest( + instances=["instances_value"] + ), ) -def test_list_errors_rest_pager(transport: str = "rest"): +def test_delete_instances_unary_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_delete_per_instance_configs_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + transport="rest", ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.RegionInstanceGroupManagersListErrorsResponse( - items=[ - compute.InstanceManagedByIgmError(), - compute.InstanceManagedByIgmError(), - compute.InstanceManagedByIgmError(), - ], - next_page_token="abc", - ), - compute.RegionInstanceGroupManagersListErrorsResponse( - items=[], - next_page_token="def", - ), - compute.RegionInstanceGroupManagersListErrorsResponse( - items=[ - compute.InstanceManagedByIgmError(), - ], - next_page_token="ghi", - ), - compute.RegionInstanceGroupManagersListErrorsResponse( - items=[ - compute.InstanceManagedByIgmError(), - compute.InstanceManagedByIgmError(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.RegionInstanceGroupManagersListErrorsResponse.to_json(x) - for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "region": "sample2", - "instance_group_manager": "sample3", - } - - pager = client.list_errors(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.InstanceManagedByIgmError) for i in results) - - pages = list(client.list_errors(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize( - "request_type", - [ - compute.ListManagedInstancesRegionInstanceGroupManagersRequest, - dict, - ], -) -def test_list_managed_instances_rest(request_type): - client = RegionInstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "instance_group_manager": "sample3", - } - request = request_type(request_init) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init[ + "region_instance_group_manager_delete_instance_config_req_resource" + ] = {"names": ["names_value_1", "names_value_2"]} + request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListInstancesResponse( - next_page_token="next_page_token_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListInstancesResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_managed_instances(request) + response = client.delete_per_instance_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListManagedInstancesPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_managed_instances_rest_required_fields( - request_type=compute.ListManagedInstancesRegionInstanceGroupManagersRequest, +def test_delete_per_instance_configs_rest_required_fields( + request_type=compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -4224,7 +4040,7 @@ def test_list_managed_instances_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_managed_instances._get_unset_required_fields(jsonified_request) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4235,17 +4051,7 @@ def test_list_managed_instances_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_managed_instances._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4263,7 +4069,7 @@ def test_list_managed_instances_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListInstancesResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4277,53 +4083,43 @@ def test_list_managed_instances_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListInstancesResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_managed_instances(request) + response = client.delete_per_instance_configs(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_managed_instances_rest_unset_required_fields(): +def test_delete_per_instance_configs_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_managed_instances._get_unset_required_fields({}) + unset_fields = transport.delete_per_instance_configs._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( "instanceGroupManager", "project", "region", + "regionInstanceGroupManagerDeleteInstanceConfigReqResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_managed_instances_rest_interceptors(null_interceptor): +def test_delete_per_instance_configs_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4337,10 +4133,10 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): path_template, "transcode" ) as transcode, mock.patch.object( transports.RegionInstanceGroupManagersRestInterceptor, - "post_list_managed_instances", + "post_delete_per_instance_configs", ) as post, mock.patch.object( transports.RegionInstanceGroupManagersRestInterceptor, - "pre_list_managed_instances", + "pre_delete_per_instance_configs", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4355,21 +4151,17 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.RegionInstanceGroupManagersListInstancesResponse.to_json( - compute.RegionInstanceGroupManagersListInstancesResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListManagedInstancesRegionInstanceGroupManagersRequest() + request = compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagersListInstancesResponse + post.return_value = compute.Operation - client.list_managed_instances( + client.delete_per_instance_configs( request, metadata=[ ("key", "val"), @@ -4381,9 +4173,9 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_managed_instances_rest_bad_request( +def test_delete_per_instance_configs_rest_bad_request( transport: str = "rest", - request_type=compute.ListManagedInstancesRegionInstanceGroupManagersRequest, + request_type=compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4396,6 +4188,9 @@ def test_list_managed_instances_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } + request_init[ + "region_instance_group_manager_delete_instance_config_req_resource" + ] = {"names": ["names_value_1", "names_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4407,10 +4202,10 @@ def test_list_managed_instances_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_managed_instances(request) + client.delete_per_instance_configs(request) -def test_list_managed_instances_rest_flattened(): +def test_delete_per_instance_configs_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4419,7 +4214,7 @@ def test_list_managed_instances_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListInstancesResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4433,35 +4228,34 @@ def test_list_managed_instances_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_manager_delete_instance_config_req_resource=compute.RegionInstanceGroupManagerDeleteInstanceConfigReq( + names=["names_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListInstancesResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_managed_instances(**mock_args) + client.delete_per_instance_configs(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/listManagedInstances" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/deletePerInstanceConfigs" % client.transport._host, args[1], ) -def test_list_managed_instances_rest_flattened_error(transport: str = "rest"): +def test_delete_per_instance_configs_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4470,94 +4264,35 @@ def test_list_managed_instances_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_managed_instances( - compute.ListManagedInstancesRegionInstanceGroupManagersRequest(), + client.delete_per_instance_configs( + compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_manager_delete_instance_config_req_resource=compute.RegionInstanceGroupManagerDeleteInstanceConfigReq( + names=["names_value"] + ), ) -def test_list_managed_instances_rest_pager(transport: str = "rest"): +def test_delete_per_instance_configs_rest_error(): client = RegionInstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.RegionInstanceGroupManagersListInstancesResponse( - managed_instances=[ - compute.ManagedInstance(), - compute.ManagedInstance(), - compute.ManagedInstance(), - ], - next_page_token="abc", - ), - compute.RegionInstanceGroupManagersListInstancesResponse( - managed_instances=[], - next_page_token="def", - ), - compute.RegionInstanceGroupManagersListInstancesResponse( - managed_instances=[ - compute.ManagedInstance(), - ], - next_page_token="ghi", - ), - compute.RegionInstanceGroupManagersListInstancesResponse( - managed_instances=[ - compute.ManagedInstance(), - compute.ManagedInstance(), - ], - ), - ) - # Two responses for two calls - response = response + response - # Wrap the values into proper Response objs - response = tuple( - compute.RegionInstanceGroupManagersListInstancesResponse.to_json(x) - for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "region": "sample2", - "instance_group_manager": "sample3", - } - - pager = client.list_managed_instances(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ManagedInstance) for i in results) - - pages = list(client.list_managed_instances(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize( - "request_type", - [ - compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, - dict, - ], -) -def test_list_per_instance_configs_rest(request_type): - client = RegionInstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) +@pytest.mark.parametrize( + "request_type", + [ + compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_delete_per_instance_configs_unary_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) # send a request that will satisfy transcoding request_init = { @@ -4565,34 +4300,53 @@ def test_list_per_instance_configs_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } + request_init[ + "region_instance_group_manager_delete_instance_config_req_resource" + ] = {"names": ["names_value_1", "names_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp( - next_page_token="next_page_token_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_per_instance_configs(request) + response = client.delete_per_instance_configs_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPerInstanceConfigsPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, compute.Operation) -def test_list_per_instance_configs_rest_required_fields( - request_type=compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, +def test_delete_per_instance_configs_unary_rest_required_fields( + request_type=compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -4611,7 +4365,7 @@ def test_list_per_instance_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_per_instance_configs._get_unset_required_fields(jsonified_request) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4622,17 +4376,7 @@ def test_list_per_instance_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_per_instance_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).delete_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4650,7 +4394,7 @@ def test_list_per_instance_configs_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4664,53 +4408,43 @@ def test_list_per_instance_configs_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_per_instance_configs(request) + response = client.delete_per_instance_configs_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_per_instance_configs_rest_unset_required_fields(): +def test_delete_per_instance_configs_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_per_instance_configs._get_unset_required_fields({}) + unset_fields = transport.delete_per_instance_configs._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( "instanceGroupManager", "project", "region", + "regionInstanceGroupManagerDeleteInstanceConfigReqResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_per_instance_configs_rest_interceptors(null_interceptor): +def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4724,10 +4458,10 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): path_template, "transcode" ) as transcode, mock.patch.object( transports.RegionInstanceGroupManagersRestInterceptor, - "post_list_per_instance_configs", + "post_delete_per_instance_configs", ) as post, mock.patch.object( transports.RegionInstanceGroupManagersRestInterceptor, - "pre_list_per_instance_configs", + "pre_delete_per_instance_configs", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4742,21 +4476,17 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( - compute.RegionInstanceGroupManagersListInstanceConfigsResp() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest() + request = compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp + post.return_value = compute.Operation - client.list_per_instance_configs( + client.delete_per_instance_configs_unary( request, metadata=[ ("key", "val"), @@ -4768,9 +4498,9 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_per_instance_configs_rest_bad_request( +def test_delete_per_instance_configs_unary_rest_bad_request( transport: str = "rest", - request_type=compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, + request_type=compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4783,6 +4513,9 @@ def test_list_per_instance_configs_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } + request_init[ + "region_instance_group_manager_delete_instance_config_req_resource" + ] = {"names": ["names_value_1", "names_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4794,10 +4527,10 @@ def test_list_per_instance_configs_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_per_instance_configs(request) + client.delete_per_instance_configs_unary(request) -def test_list_per_instance_configs_rest_flattened(): +def test_delete_per_instance_configs_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4806,7 +4539,7 @@ def test_list_per_instance_configs_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4820,35 +4553,36 @@ def test_list_per_instance_configs_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_manager_delete_instance_config_req_resource=compute.RegionInstanceGroupManagerDeleteInstanceConfigReq( + names=["names_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_per_instance_configs(**mock_args) + client.delete_per_instance_configs_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/listPerInstanceConfigs" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/deletePerInstanceConfigs" % client.transport._host, args[1], ) -def test_list_per_instance_configs_rest_flattened_error(transport: str = "rest"): +def test_delete_per_instance_configs_unary_rest_flattened_error( + transport: str = "rest", +): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4857,90 +4591,31 @@ def test_list_per_instance_configs_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_per_instance_configs( - compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest(), + client.delete_per_instance_configs_unary( + compute.DeletePerInstanceConfigsRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", + region_instance_group_manager_delete_instance_config_req_resource=compute.RegionInstanceGroupManagerDeleteInstanceConfigReq( + names=["names_value"] + ), ) -def test_list_per_instance_configs_rest_pager(transport: str = "rest"): +def test_delete_per_instance_configs_unary_rest_error(): client = RegionInstanceGroupManagersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.RegionInstanceGroupManagersListInstanceConfigsResp( - items=[ - compute.PerInstanceConfig(), - compute.PerInstanceConfig(), - compute.PerInstanceConfig(), - ], - next_page_token="abc", - ), - compute.RegionInstanceGroupManagersListInstanceConfigsResp( - items=[], - next_page_token="def", - ), - compute.RegionInstanceGroupManagersListInstanceConfigsResp( - items=[ - compute.PerInstanceConfig(), - ], - next_page_token="ghi", - ), - compute.RegionInstanceGroupManagersListInstanceConfigsResp( - items=[ - compute.PerInstanceConfig(), - compute.PerInstanceConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json(x) - for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "region": "sample2", - "instance_group_manager": "sample3", - } - - pager = client.list_per_instance_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.PerInstanceConfig) for i in results) - - pages = list(client.list_per_instance_configs(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionInstanceGroupManagerRequest, + compute.GetRegionInstanceGroupManagerRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_get_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4952,137 +4627,56 @@ def test_patch_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["instance_group_manager_resource"] = { - "auto_healing_policies": [ - {"health_check": "health_check_value", "initial_delay_sec": 1778} - ], - "base_instance_name": "base_instance_name_value", - "creation_timestamp": "creation_timestamp_value", - "current_actions": { - "abandoning": 1041, - "creating": 845, - "creating_without_retries": 2589, - "deleting": 844, - "none": 432, - "recreating": 1060, - "refreshing": 1069, - "restarting": 1091, - "resuming": 874, - "starting": 876, - "stopping": 884, - "suspending": 1088, - "verifying": 979, - }, - "description": "description_value", - "distribution_policy": { - "target_shape": "target_shape_value", - "zones": [{"zone": "zone_value"}], - }, - "fingerprint": "fingerprint_value", - "id": 205, - "instance_group": "instance_group_value", - "instance_template": "instance_template_value", - "kind": "kind_value", - "name": "name_value", - "named_ports": [{"name": "name_value", "port": 453}], - "region": "region_value", - "self_link": "self_link_value", - "stateful_policy": {"preserved_state": {"disks": {}}}, - "status": { - "autoscaler": "autoscaler_value", - "is_stable": True, - "stateful": { - "has_stateful_config": True, - "per_instance_configs": {"all_effective": True}, - }, - "version_target": {"is_reached": True}, - }, - "target_pools": ["target_pools_value_1", "target_pools_value_2"], - "target_size": 1185, - "update_policy": { - "instance_redistribution_type": "instance_redistribution_type_value", - "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, - "max_unavailable": {}, - "minimal_action": "minimal_action_value", - "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", - "replacement_method": "replacement_method_value", - "type_": "type__value", - }, - "versions": [ - { - "instance_template": "instance_template_value", - "name": "name_value", - "target_size": {}, - } - ], - "zone": "zone_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.InstanceGroupManager( + base_instance_name="base_instance_name_value", creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", + instance_group="instance_group_value", + instance_template="instance_template_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", + target_pools=["target_pools_value"], + target_size=1185, zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupManager.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.InstanceGroupManager) + assert response.base_instance_name == "base_instance_name_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.instance_group == "instance_group_value" + assert response.instance_template == "instance_template_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" + assert response.target_pools == ["target_pools_value"] + assert response.target_size == 1185 assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionInstanceGroupManagerRequest, +def test_get_rest_required_fields( + request_type=compute.GetRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -5101,7 +4695,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -5112,9 +4706,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -5132,7 +4724,7 @@ def test_patch_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.InstanceGroupManager() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -5143,37 +4735,35 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.InstanceGroupManager.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "instanceGroupManager", - "instanceGroupManagerResource", "project", "region", ) @@ -5182,7 +4772,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5195,9 +4785,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_patch" + transports.RegionInstanceGroupManagersRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_patch" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5212,17 +4802,19 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.InstanceGroupManager.to_json( + compute.InstanceGroupManager() + ) - request = compute.PatchRegionInstanceGroupManagerRequest() + request = compute.GetRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.InstanceGroupManager - client.patch_unary( + client.get( request, metadata=[ ("key", "val"), @@ -5234,8 +4826,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRegionInstanceGroupManagerRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionInstanceGroupManagerRequest ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5248,6 +4840,105 @@ def test_patch_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.InstanceGroupManager() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.InstanceGroupManager.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_get_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} request_init["instance_group_manager_resource"] = { "auto_healing_policies": [ {"health_check": "health_check_value", "initial_delay_sec": 1778} @@ -5315,6 +5006,5259 @@ def test_patch_unary_rest_bad_request( } request = request_type(request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManagerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_insert_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManagerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionInstanceGroupManagersRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagerList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RegionInstanceGroupManagerList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionInstanceGroupManagersRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagerList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RegionInstanceGroupManagerList.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.RegionInstanceGroupManagerList.to_json( + compute.RegionInstanceGroupManagerList() + ) + + request = compute.ListRegionInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RegionInstanceGroupManagerList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionInstanceGroupManagersRequest +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagerList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RegionInstanceGroupManagerList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionInstanceGroupManagersRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.RegionInstanceGroupManagerList( + items=[ + compute.InstanceGroupManager(), + compute.InstanceGroupManager(), + compute.InstanceGroupManager(), + ], + next_page_token="abc", + ), + compute.RegionInstanceGroupManagerList( + items=[], + next_page_token="def", + ), + compute.RegionInstanceGroupManagerList( + items=[ + compute.InstanceGroupManager(), + ], + next_page_token="ghi", + ), + compute.RegionInstanceGroupManagerList( + items=[ + compute.InstanceGroupManager(), + compute.InstanceGroupManager(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.RegionInstanceGroupManagerList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InstanceGroupManager) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListErrorsRegionInstanceGroupManagersRequest, + dict, + ], +) +def test_list_errors_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListErrorsResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListErrorsResponse.to_json(return_value) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_errors(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListErrorsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_errors_rest_required_fields( + request_type=compute.ListErrorsRegionInstanceGroupManagersRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_errors._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_errors._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListErrorsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListErrorsResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_errors(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_errors_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_errors._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_errors_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_list_errors" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_list_errors" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.RegionInstanceGroupManagersListErrorsResponse.to_json( + compute.RegionInstanceGroupManagersListErrorsResponse() + ) + ) + + request = compute.ListErrorsRegionInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RegionInstanceGroupManagersListErrorsResponse + + client.list_errors( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_errors_rest_bad_request( + transport: str = "rest", + request_type=compute.ListErrorsRegionInstanceGroupManagersRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_errors(request) + + +def test_list_errors_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListErrorsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListErrorsResponse.to_json(return_value) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_errors(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/listErrors" + % client.transport._host, + args[1], + ) + + +def test_list_errors_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_errors( + compute.ListErrorsRegionInstanceGroupManagersRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_list_errors_rest_pager(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.RegionInstanceGroupManagersListErrorsResponse( + items=[ + compute.InstanceManagedByIgmError(), + compute.InstanceManagedByIgmError(), + compute.InstanceManagedByIgmError(), + ], + next_page_token="abc", + ), + compute.RegionInstanceGroupManagersListErrorsResponse( + items=[], + next_page_token="def", + ), + compute.RegionInstanceGroupManagersListErrorsResponse( + items=[ + compute.InstanceManagedByIgmError(), + ], + next_page_token="ghi", + ), + compute.RegionInstanceGroupManagersListErrorsResponse( + items=[ + compute.InstanceManagedByIgmError(), + compute.InstanceManagedByIgmError(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.RegionInstanceGroupManagersListErrorsResponse.to_json(x) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + pager = client.list_errors(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.InstanceManagedByIgmError) for i in results) + + pages = list(client.list_errors(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListManagedInstancesRegionInstanceGroupManagersRequest, + dict, + ], +) +def test_list_managed_instances_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListInstancesResponse( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListInstancesResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_managed_instances(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListManagedInstancesPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_managed_instances_rest_required_fields( + request_type=compute.ListManagedInstancesRegionInstanceGroupManagersRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_managed_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_managed_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListInstancesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListInstancesResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_managed_instances(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_managed_instances_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_managed_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_managed_instances_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "post_list_managed_instances", + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_list_managed_instances", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.RegionInstanceGroupManagersListInstancesResponse.to_json( + compute.RegionInstanceGroupManagersListInstancesResponse() + ) + ) + + request = compute.ListManagedInstancesRegionInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RegionInstanceGroupManagersListInstancesResponse + + client.list_managed_instances( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_managed_instances_rest_bad_request( + transport: str = "rest", + request_type=compute.ListManagedInstancesRegionInstanceGroupManagersRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_managed_instances(request) + + +def test_list_managed_instances_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListInstancesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListInstancesResponse.to_json( + return_value + ) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_managed_instances(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/listManagedInstances" + % client.transport._host, + args[1], + ) + + +def test_list_managed_instances_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_managed_instances( + compute.ListManagedInstancesRegionInstanceGroupManagersRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_list_managed_instances_rest_pager(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.RegionInstanceGroupManagersListInstancesResponse( + managed_instances=[ + compute.ManagedInstance(), + compute.ManagedInstance(), + compute.ManagedInstance(), + ], + next_page_token="abc", + ), + compute.RegionInstanceGroupManagersListInstancesResponse( + managed_instances=[], + next_page_token="def", + ), + compute.RegionInstanceGroupManagersListInstancesResponse( + managed_instances=[ + compute.ManagedInstance(), + ], + next_page_token="ghi", + ), + compute.RegionInstanceGroupManagersListInstancesResponse( + managed_instances=[ + compute.ManagedInstance(), + compute.ManagedInstance(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.RegionInstanceGroupManagersListInstancesResponse.to_json(x) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + pager = client.list_managed_instances(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ManagedInstance) for i in results) + + pages = list(client.list_managed_instances(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, + dict, + ], +) +def test_list_per_instance_configs_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp( + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_per_instance_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPerInstanceConfigsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_per_instance_configs_rest_required_fields( + request_type=compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_per_instance_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_per_instance_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_per_instance_configs(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_per_instance_configs_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_per_instance_configs._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_per_instance_configs_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "post_list_per_instance_configs", + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_list_per_instance_configs", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( + compute.RegionInstanceGroupManagersListInstanceConfigsResp() + ) + ) + + request = compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp + + client.list_per_instance_configs( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_per_instance_configs_rest_bad_request( + transport: str = "rest", + request_type=compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_per_instance_configs(request) + + +def test_list_per_instance_configs_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json( + return_value + ) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_per_instance_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/listPerInstanceConfigs" + % client.transport._host, + args[1], + ) + + +def test_list_per_instance_configs_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_per_instance_configs( + compute.ListPerInstanceConfigsRegionInstanceGroupManagersRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + ) + + +def test_list_per_instance_configs_rest_pager(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.RegionInstanceGroupManagersListInstanceConfigsResp( + items=[ + compute.PerInstanceConfig(), + compute.PerInstanceConfig(), + compute.PerInstanceConfig(), + ], + next_page_token="abc", + ), + compute.RegionInstanceGroupManagersListInstanceConfigsResp( + items=[], + next_page_token="def", + ), + compute.RegionInstanceGroupManagersListInstanceConfigsResp( + items=[ + compute.PerInstanceConfig(), + ], + next_page_token="ghi", + ), + compute.RegionInstanceGroupManagersListInstanceConfigsResp( + items=[ + compute.PerInstanceConfig(), + compute.PerInstanceConfig(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.RegionInstanceGroupManagersListInstanceConfigsResp.to_json(x) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + pager = client.list_per_instance_configs(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.PerInstanceConfig) for i in results) + + pages = list(client.list_per_instance_configs(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionInstanceGroupManagerRequest +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_patch_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "instanceGroupManagerResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionInstanceGroupManagerRequest +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["instance_group_manager_resource"] = { + "auto_healing_policies": [ + {"health_check": "health_check_value", "initial_delay_sec": 1778} + ], + "base_instance_name": "base_instance_name_value", + "creation_timestamp": "creation_timestamp_value", + "current_actions": { + "abandoning": 1041, + "creating": 845, + "creating_without_retries": 2589, + "deleting": 844, + "none": 432, + "recreating": 1060, + "refreshing": 1069, + "restarting": 1091, + "resuming": 874, + "starting": 876, + "stopping": 884, + "suspending": 1088, + "verifying": 979, + }, + "description": "description_value", + "distribution_policy": { + "target_shape": "target_shape_value", + "zones": [{"zone": "zone_value"}], + }, + "fingerprint": "fingerprint_value", + "id": 205, + "instance_group": "instance_group_value", + "instance_template": "instance_template_value", + "kind": "kind_value", + "name": "name_value", + "named_ports": [{"name": "name_value", "port": 453}], + "region": "region_value", + "self_link": "self_link_value", + "stateful_policy": {"preserved_state": {"disks": {}}}, + "status": { + "autoscaler": "autoscaler_value", + "is_stable": True, + "stateful": { + "has_stateful_config": True, + "per_instance_configs": {"all_effective": True}, + }, + "version_target": {"is_reached": True}, + }, + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + "target_size": 1185, + "update_policy": { + "instance_redistribution_type": "instance_redistribution_type_value", + "max_surge": {"calculated": 1042, "fixed": 528, "percent": 753}, + "max_unavailable": {}, + "minimal_action": "minimal_action_value", + "most_disruptive_allowed_action": "most_disruptive_allowed_action_value", + "replacement_method": "replacement_method_value", + "type_": "type__value", + }, + "versions": [ + { + "instance_template": "instance_template_value", + "name": "name_value", + "target_size": {}, + } + ], + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + instance_group_manager_resource=compute.InstanceGroupManager( + auto_healing_policies=[ + compute.InstanceGroupManagerAutoHealingPolicy( + health_check="health_check_value" + ) + ] + ), + ) + + +def test_patch_unary_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_per_instance_configs_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_manager_patch_instance_config_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_per_instance_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_per_instance_configs_rest_required_fields( + request_type=compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_per_instance_configs(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_per_instance_configs_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_per_instance_configs._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "project", + "region", + "regionInstanceGroupManagerPatchInstanceConfigReqResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_per_instance_configs_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "post_patch_per_instance_configs", + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_patch_per_instance_configs", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_per_instance_configs( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_per_instance_configs_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_manager_patch_instance_config_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_per_instance_configs(request) + + +def test_patch_per_instance_configs_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_manager_patch_instance_config_req_resource=compute.RegionInstanceGroupManagerPatchInstanceConfigReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_per_instance_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/patchPerInstanceConfigs" + % client.transport._host, + args[1], + ) + + +def test_patch_per_instance_configs_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_per_instance_configs( + compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_manager_patch_instance_config_req_resource=compute.RegionInstanceGroupManagerPatchInstanceConfigReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + + +def test_patch_per_instance_configs_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_patch_per_instance_configs_unary_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_manager_patch_instance_config_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_per_instance_configs_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_per_instance_configs_unary_rest_required_fields( + request_type=compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_per_instance_configs_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_per_instance_configs_unary_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_per_instance_configs._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "project", + "region", + "regionInstanceGroupManagerPatchInstanceConfigReqResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "post_patch_per_instance_configs", + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_patch_per_instance_configs", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_per_instance_configs_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_per_instance_configs_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_manager_patch_instance_config_req_resource"] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_per_instance_configs_unary(request) + + +def test_patch_per_instance_configs_unary_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_manager_patch_instance_config_req_resource=compute.RegionInstanceGroupManagerPatchInstanceConfigReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_per_instance_configs_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/patchPerInstanceConfigs" + % client.transport._host, + args[1], + ) + + +def test_patch_per_instance_configs_unary_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_per_instance_configs_unary( + compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_manager_patch_instance_config_req_resource=compute.RegionInstanceGroupManagerPatchInstanceConfigReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] + ), + ) + + +def test_patch_per_instance_configs_unary_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RecreateInstancesRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_recreate_instances_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_managers_recreate_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.recreate_instances(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_recreate_instances_rest_required_fields( + request_type=compute.RecreateInstancesRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.recreate_instances(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_recreate_instances_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.recreate_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "project", + "region", + "regionInstanceGroupManagersRecreateRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_recreate_instances_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_recreate_instances" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_recreate_instances" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RecreateInstancesRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.recreate_instances( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_recreate_instances_rest_bad_request( + transport: str = "rest", + request_type=compute.RecreateInstancesRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_managers_recreate_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.recreate_instances(request) + + +def test_recreate_instances_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_managers_recreate_request_resource=compute.RegionInstanceGroupManagersRecreateRequest( + instances=["instances_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.recreate_instances(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/recreateInstances" + % client.transport._host, + args[1], + ) + + +def test_recreate_instances_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.recreate_instances( + compute.RecreateInstancesRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_managers_recreate_request_resource=compute.RegionInstanceGroupManagersRecreateRequest( + instances=["instances_value"] + ), + ) + + +def test_recreate_instances_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RecreateInstancesRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_recreate_instances_unary_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_managers_recreate_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.recreate_instances_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_recreate_instances_unary_rest_required_fields( + request_type=compute.RecreateInstancesRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).recreate_instances._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.recreate_instances_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_recreate_instances_unary_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.recreate_instances._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroupManager", + "project", + "region", + "regionInstanceGroupManagersRecreateRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_recreate_instances_unary_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_recreate_instances" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_recreate_instances" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RecreateInstancesRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.recreate_instances_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_recreate_instances_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.RecreateInstancesRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request_init["region_instance_group_managers_recreate_request_resource"] = { + "instances": ["instances_value_1", "instances_value_2"] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.recreate_instances_unary(request) + + +def test_recreate_instances_unary_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_managers_recreate_request_resource=compute.RegionInstanceGroupManagersRecreateRequest( + instances=["instances_value"] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.recreate_instances_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/recreateInstances" + % client.transport._host, + args[1], + ) + + +def test_recreate_instances_unary_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.recreate_instances_unary( + compute.RecreateInstancesRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + region_instance_group_managers_recreate_request_resource=compute.RegionInstanceGroupManagersRecreateRequest( + instances=["instances_value"] + ), + ) + + +def test_recreate_instances_unary_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_resize_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_resize_rest_required_fields( + request_type=compute.ResizeRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request_init["size"] = 0 + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "size" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "size" in jsonified_request + assert jsonified_request["size"] == request_init["size"] + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["size"] = 443 + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "size", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "size" in jsonified_request + assert jsonified_request["size"] == 443 + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize(request) + + expected_params = [ + ( + "size", + 0, + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "size", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "region", + "size", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_rest_bad_request( + transport: str = "rest", + request_type=compute.ResizeRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize(request) + + +def test_resize_rest_flattened(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + size=443, + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize( + compute.ResizeRegionInstanceGroupManagerRequest(), + project="project_value", + region="region_value", + instance_group_manager="instance_group_manager_value", + size=443, + ) + + +def test_resize_rest_error(): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeRegionInstanceGroupManagerRequest, + dict, + ], +) +def test_resize_unary_rest(request_type): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_resize_unary_rest_required_fields( + request_type=compute.ResizeRegionInstanceGroupManagerRequest, +): + transport_class = transports.RegionInstanceGroupManagersRestTransport + + request_init = {} + request_init["instance_group_manager"] = "" + request_init["project"] = "" + request_init["region"] = "" + request_init["size"] = 0 + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + assert "size" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "size" in jsonified_request + assert jsonified_request["size"] == request_init["size"] + + jsonified_request["instanceGroupManager"] = "instance_group_manager_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["size"] = 443 + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "size", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroupManager" in jsonified_request + assert jsonified_request["instanceGroupManager"] == "instance_group_manager_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "size" in jsonified_request + assert jsonified_request["size"] == 443 + + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize_unary(request) + + expected_params = [ + ( + "size", + 0, + ), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_unary_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "size", + ) + ) + & set( + ( + "instanceGroupManager", + "project", + "region", + "size", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_unary_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupManagersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupManagersRestInterceptor(), + ) + client = RegionInstanceGroupManagersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.RegionInstanceGroupManagersRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeRegionInstanceGroupManagerRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.ResizeRegionInstanceGroupManagerRequest, +): + client = RegionInstanceGroupManagersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group_manager": "sample3", + } + request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. with mock.patch.object(Session, "request") as req, pytest.raises( core_exceptions.BadRequest @@ -5324,10 +10268,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.resize_unary(request) -def test_patch_unary_rest_flattened(): +def test_resize_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5350,13 +10294,7 @@ def test_patch_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + size=443, ) mock_args.update(sample_request) @@ -5368,20 +10306,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.resize_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/resize" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_resize_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5390,22 +10328,16 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionInstanceGroupManagerRequest(), + client.resize_unary( + compute.ResizeRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - instance_group_manager_resource=compute.InstanceGroupManager( - auto_healing_policies=[ - compute.InstanceGroupManagerAutoHealingPolicy( - health_check="health_check_value" - ) - ] - ), + size=443, ) -def test_patch_unary_rest_error(): +def test_resize_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5414,11 +10346,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, + compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict, ], ) -def test_patch_per_instance_configs_unary_rest(request_type): +def test_set_instance_template_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5430,15 +10362,8 @@ def test_patch_per_instance_configs_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_manager_patch_instance_config_req_resource"] = { - "per_instance_configs": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["region_instance_group_managers_set_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -5476,10 +10401,10 @@ def test_patch_per_instance_configs_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_per_instance_configs_unary(request) + response = client.set_instance_template(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -5504,8 +10429,8 @@ def test_patch_per_instance_configs_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_per_instance_configs_unary_rest_required_fields( - request_type=compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, +def test_set_instance_template_rest_required_fields( + request_type=compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -5524,7 +10449,7 @@ def test_patch_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -5535,7 +10460,7 @@ def test_patch_per_instance_configs_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_per_instance_configs._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -5578,19 +10503,19 @@ def test_patch_per_instance_configs_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_per_instance_configs_unary(request) + response = client.set_instance_template(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_per_instance_configs_unary_rest_unset_required_fields(): +def test_set_instance_template_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch_per_instance_configs._get_unset_required_fields({}) + unset_fields = transport.set_instance_template._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -5598,14 +10523,14 @@ def test_patch_per_instance_configs_unary_rest_unset_required_fields(): "instanceGroupManager", "project", "region", - "regionInstanceGroupManagerPatchInstanceConfigReqResource", + "regionInstanceGroupManagersSetTemplateRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): +def test_set_instance_template_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5619,10 +10544,10 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): path_template, "transcode" ) as transcode, mock.patch.object( transports.RegionInstanceGroupManagersRestInterceptor, - "post_patch_per_instance_configs", + "post_set_instance_template", ) as post, mock.patch.object( transports.RegionInstanceGroupManagersRestInterceptor, - "pre_patch_per_instance_configs", + "pre_set_instance_template", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5639,7 +10564,7 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest() + request = compute.SetInstanceTemplateRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -5647,7 +10572,7 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_per_instance_configs_unary( + client.set_instance_template( request, metadata=[ ("key", "val"), @@ -5659,9 +10584,9 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_per_instance_configs_unary_rest_bad_request( +def test_set_instance_template_rest_bad_request( transport: str = "rest", - request_type=compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest, + request_type=compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5674,15 +10599,8 @@ def test_patch_per_instance_configs_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_manager_patch_instance_config_req_resource"] = { - "per_instance_configs": [ - { - "fingerprint": "fingerprint_value", - "name": "name_value", - "preserved_state": {"disks": {}, "metadata": {}}, - "status": "status_value", - } - ] + request_init["region_instance_group_managers_set_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -5695,10 +10613,10 @@ def test_patch_per_instance_configs_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_per_instance_configs_unary(request) + client.set_instance_template(request) -def test_patch_per_instance_configs_unary_rest_flattened(): +def test_set_instance_template_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5721,10 +10639,8 @@ def test_patch_per_instance_configs_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_manager_patch_instance_config_req_resource=compute.RegionInstanceGroupManagerPatchInstanceConfigReq( - per_instance_configs=[ - compute.PerInstanceConfig(fingerprint="fingerprint_value") - ] + region_instance_group_managers_set_template_request_resource=compute.RegionInstanceGroupManagersSetTemplateRequest( + instance_template="instance_template_value" ), ) mock_args.update(sample_request) @@ -5737,20 +10653,20 @@ def test_patch_per_instance_configs_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_per_instance_configs_unary(**mock_args) + client.set_instance_template(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/patchPerInstanceConfigs" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/setInstanceTemplate" % client.transport._host, args[1], ) -def test_patch_per_instance_configs_unary_rest_flattened_error(transport: str = "rest"): +def test_set_instance_template_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5759,20 +10675,18 @@ def test_patch_per_instance_configs_unary_rest_flattened_error(transport: str = # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_per_instance_configs_unary( - compute.PatchPerInstanceConfigsRegionInstanceGroupManagerRequest(), + client.set_instance_template( + compute.SetInstanceTemplateRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_manager_patch_instance_config_req_resource=compute.RegionInstanceGroupManagerPatchInstanceConfigReq( - per_instance_configs=[ - compute.PerInstanceConfig(fingerprint="fingerprint_value") - ] + region_instance_group_managers_set_template_request_resource=compute.RegionInstanceGroupManagersSetTemplateRequest( + instance_template="instance_template_value" ), ) -def test_patch_per_instance_configs_unary_rest_error(): +def test_set_instance_template_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5781,11 +10695,11 @@ def test_patch_per_instance_configs_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RecreateInstancesRegionInstanceGroupManagerRequest, + compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, dict, ], ) -def test_recreate_instances_unary_rest(request_type): +def test_set_instance_template_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5797,8 +10711,8 @@ def test_recreate_instances_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_recreate_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"] + request_init["region_instance_group_managers_set_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -5836,36 +10750,14 @@ def test_recreate_instances_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.recreate_instances_unary(request) + response = client.set_instance_template_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_recreate_instances_unary_rest_required_fields( - request_type=compute.RecreateInstancesRegionInstanceGroupManagerRequest, +def test_set_instance_template_unary_rest_required_fields( + request_type=compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -5884,7 +10776,7 @@ def test_recreate_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).recreate_instances._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -5895,7 +10787,7 @@ def test_recreate_instances_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).recreate_instances._get_unset_required_fields(jsonified_request) + ).set_instance_template._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -5938,19 +10830,19 @@ def test_recreate_instances_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.recreate_instances_unary(request) + response = client.set_instance_template_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_recreate_instances_unary_rest_unset_required_fields(): +def test_set_instance_template_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.recreate_instances._get_unset_required_fields({}) + unset_fields = transport.set_instance_template._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -5958,14 +10850,14 @@ def test_recreate_instances_unary_rest_unset_required_fields(): "instanceGroupManager", "project", "region", - "regionInstanceGroupManagersRecreateRequestResource", + "regionInstanceGroupManagersSetTemplateRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_recreate_instances_unary_rest_interceptors(null_interceptor): +def test_set_instance_template_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5978,9 +10870,11 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_recreate_instances" + transports.RegionInstanceGroupManagersRestInterceptor, + "post_set_instance_template", ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_recreate_instances" + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_set_instance_template", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5997,7 +10891,7 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RecreateInstancesRegionInstanceGroupManagerRequest() + request = compute.SetInstanceTemplateRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -6005,7 +10899,7 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.recreate_instances_unary( + client.set_instance_template_unary( request, metadata=[ ("key", "val"), @@ -6017,9 +10911,9 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_recreate_instances_unary_rest_bad_request( +def test_set_instance_template_unary_rest_bad_request( transport: str = "rest", - request_type=compute.RecreateInstancesRegionInstanceGroupManagerRequest, + request_type=compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6032,8 +10926,8 @@ def test_recreate_instances_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_recreate_request_resource"] = { - "instances": ["instances_value_1", "instances_value_2"] + request_init["region_instance_group_managers_set_template_request_resource"] = { + "instance_template": "instance_template_value" } request = request_type(request_init) @@ -6046,10 +10940,10 @@ def test_recreate_instances_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.recreate_instances_unary(request) + client.set_instance_template_unary(request) -def test_recreate_instances_unary_rest_flattened(): +def test_set_instance_template_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6072,8 +10966,8 @@ def test_recreate_instances_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_recreate_request_resource=compute.RegionInstanceGroupManagersRecreateRequest( - instances=["instances_value"] + region_instance_group_managers_set_template_request_resource=compute.RegionInstanceGroupManagersSetTemplateRequest( + instance_template="instance_template_value" ), ) mock_args.update(sample_request) @@ -6086,20 +10980,20 @@ def test_recreate_instances_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.recreate_instances_unary(**mock_args) + client.set_instance_template_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/recreateInstances" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/setInstanceTemplate" % client.transport._host, args[1], ) -def test_recreate_instances_unary_rest_flattened_error(transport: str = "rest"): +def test_set_instance_template_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6108,18 +11002,18 @@ def test_recreate_instances_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.recreate_instances_unary( - compute.RecreateInstancesRegionInstanceGroupManagerRequest(), + client.set_instance_template_unary( + compute.SetInstanceTemplateRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_recreate_request_resource=compute.RegionInstanceGroupManagersRecreateRequest( - instances=["instances_value"] + region_instance_group_managers_set_template_request_resource=compute.RegionInstanceGroupManagersSetTemplateRequest( + instance_template="instance_template_value" ), ) -def test_recreate_instances_unary_rest_error(): +def test_set_instance_template_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6128,11 +11022,11 @@ def test_recreate_instances_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ResizeRegionInstanceGroupManagerRequest, + compute.SetTargetPoolsRegionInstanceGroupManagerRequest, dict, ], ) -def test_resize_unary_rest(request_type): +def test_set_target_pools_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6144,6 +11038,10 @@ def test_resize_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } + request_init["region_instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -6180,10 +11078,10 @@ def test_resize_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.set_target_pools(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -6208,8 +11106,8 @@ def test_resize_unary_rest(request_type): assert response.zone == "zone_value" -def test_resize_unary_rest_required_fields( - request_type=compute.ResizeRegionInstanceGroupManagerRequest, +def test_set_target_pools_rest_required_fields( + request_type=compute.SetTargetPoolsRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -6217,7 +11115,6 @@ def test_resize_unary_rest_required_fields( request_init["instance_group_manager"] = "" request_init["project"] = "" request_init["region"] = "" - request_init["size"] = 0 request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -6226,32 +11123,23 @@ def test_resize_unary_rest_required_fields( ) # verify fields with default values are dropped - assert "size" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "size" in jsonified_request - assert jsonified_request["size"] == request_init["size"] jsonified_request["instanceGroupManager"] = "instance_group_manager_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["size"] = 443 unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "size", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -6261,8 +11149,6 @@ def test_resize_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "size" in jsonified_request - assert jsonified_request["size"] == 443 client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6285,6 +11171,7 @@ def test_resize_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -6293,44 +11180,34 @@ def test_resize_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.set_target_pools(request) - expected_params = [ - ( - "size", - 0, - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_resize_unary_rest_unset_required_fields(): +def test_set_target_pools_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.resize._get_unset_required_fields({}) + unset_fields = transport.set_target_pools._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "size", - ) - ) + set(("requestId",)) & set( ( "instanceGroupManager", "project", "region", - "size", + "regionInstanceGroupManagersSetTargetPoolsRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_resize_unary_rest_interceptors(null_interceptor): +def test_set_target_pools_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -6343,9 +11220,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_resize" + transports.RegionInstanceGroupManagersRestInterceptor, "post_set_target_pools" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_resize" + transports.RegionInstanceGroupManagersRestInterceptor, "pre_set_target_pools" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6362,7 +11239,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ResizeRegionInstanceGroupManagerRequest() + request = compute.SetTargetPoolsRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -6370,7 +11247,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.resize_unary( + client.set_target_pools( request, metadata=[ ("key", "val"), @@ -6382,9 +11259,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_resize_unary_rest_bad_request( +def test_set_target_pools_rest_bad_request( transport: str = "rest", - request_type=compute.ResizeRegionInstanceGroupManagerRequest, + request_type=compute.SetTargetPoolsRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6397,6 +11274,10 @@ def test_resize_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } + request_init["region_instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6408,10 +11289,10 @@ def test_resize_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.resize_unary(request) + client.set_target_pools(request) -def test_resize_unary_rest_flattened(): +def test_set_target_pools_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6434,7 +11315,9 @@ def test_resize_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - size=443, + region_instance_group_managers_set_target_pools_request_resource=compute.RegionInstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" + ), ) mock_args.update(sample_request) @@ -6446,20 +11329,20 @@ def test_resize_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.resize_unary(**mock_args) + client.set_target_pools(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/resize" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/setTargetPools" % client.transport._host, args[1], ) -def test_resize_unary_rest_flattened_error(transport: str = "rest"): +def test_set_target_pools_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6468,16 +11351,18 @@ def test_resize_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.resize_unary( - compute.ResizeRegionInstanceGroupManagerRequest(), + client.set_target_pools( + compute.SetTargetPoolsRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - size=443, + region_instance_group_managers_set_target_pools_request_resource=compute.RegionInstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" + ), ) -def test_resize_unary_rest_error(): +def test_set_target_pools_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6486,11 +11371,11 @@ def test_resize_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, + compute.SetTargetPoolsRegionInstanceGroupManagerRequest, dict, ], ) -def test_set_instance_template_unary_rest(request_type): +def test_set_target_pools_unary_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6502,8 +11387,9 @@ def test_set_instance_template_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_set_template_request_resource"] = { - "instance_template": "instance_template_value" + request_init["region_instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], } request = request_type(request_init) @@ -6541,36 +11427,14 @@ def test_set_instance_template_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_instance_template_unary(request) + response = client.set_target_pools_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_instance_template_unary_rest_required_fields( - request_type=compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, +def test_set_target_pools_unary_rest_required_fields( + request_type=compute.SetTargetPoolsRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -6589,7 +11453,7 @@ def test_set_instance_template_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_instance_template._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -6600,7 +11464,7 @@ def test_set_instance_template_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_instance_template._get_unset_required_fields(jsonified_request) + ).set_target_pools._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -6643,19 +11507,19 @@ def test_set_instance_template_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_instance_template_unary(request) + response = client.set_target_pools_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_instance_template_unary_rest_unset_required_fields(): +def test_set_target_pools_unary_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_instance_template._get_unset_required_fields({}) + unset_fields = transport.set_target_pools._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -6663,14 +11527,14 @@ def test_set_instance_template_unary_rest_unset_required_fields(): "instanceGroupManager", "project", "region", - "regionInstanceGroupManagersSetTemplateRequestResource", + "regionInstanceGroupManagersSetTargetPoolsRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_instance_template_unary_rest_interceptors(null_interceptor): +def test_set_target_pools_unary_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -6683,11 +11547,9 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, - "post_set_instance_template", + transports.RegionInstanceGroupManagersRestInterceptor, "post_set_target_pools" ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, - "pre_set_instance_template", + transports.RegionInstanceGroupManagersRestInterceptor, "pre_set_target_pools" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -6704,7 +11566,7 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetInstanceTemplateRegionInstanceGroupManagerRequest() + request = compute.SetTargetPoolsRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -6712,7 +11574,7 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_instance_template_unary( + client.set_target_pools_unary( request, metadata=[ ("key", "val"), @@ -6724,9 +11586,9 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_instance_template_unary_rest_bad_request( +def test_set_target_pools_unary_rest_bad_request( transport: str = "rest", - request_type=compute.SetInstanceTemplateRegionInstanceGroupManagerRequest, + request_type=compute.SetTargetPoolsRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6739,8 +11601,9 @@ def test_set_instance_template_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_set_template_request_resource"] = { - "instance_template": "instance_template_value" + request_init["region_instance_group_managers_set_target_pools_request_resource"] = { + "fingerprint": "fingerprint_value", + "target_pools": ["target_pools_value_1", "target_pools_value_2"], } request = request_type(request_init) @@ -6753,10 +11616,10 @@ def test_set_instance_template_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_instance_template_unary(request) + client.set_target_pools_unary(request) -def test_set_instance_template_unary_rest_flattened(): +def test_set_target_pools_unary_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6779,8 +11642,8 @@ def test_set_instance_template_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_set_template_request_resource=compute.RegionInstanceGroupManagersSetTemplateRequest( - instance_template="instance_template_value" + region_instance_group_managers_set_target_pools_request_resource=compute.RegionInstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" ), ) mock_args.update(sample_request) @@ -6793,20 +11656,20 @@ def test_set_instance_template_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_instance_template_unary(**mock_args) + client.set_target_pools_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/setInstanceTemplate" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/setTargetPools" % client.transport._host, args[1], ) -def test_set_instance_template_unary_rest_flattened_error(transport: str = "rest"): +def test_set_target_pools_unary_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6815,18 +11678,18 @@ def test_set_instance_template_unary_rest_flattened_error(transport: str = "rest # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_instance_template_unary( - compute.SetInstanceTemplateRegionInstanceGroupManagerRequest(), + client.set_target_pools_unary( + compute.SetTargetPoolsRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_set_template_request_resource=compute.RegionInstanceGroupManagersSetTemplateRequest( - instance_template="instance_template_value" + region_instance_group_managers_set_target_pools_request_resource=compute.RegionInstanceGroupManagersSetTargetPoolsRequest( + fingerprint="fingerprint_value" ), ) -def test_set_instance_template_unary_rest_error(): +def test_set_target_pools_unary_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -6835,11 +11698,11 @@ def test_set_instance_template_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetTargetPoolsRegionInstanceGroupManagerRequest, + compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest, dict, ], ) -def test_set_target_pools_unary_rest(request_type): +def test_update_per_instance_configs_rest(request_type): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -6851,9 +11714,17 @@ def test_set_target_pools_unary_rest(request_type): "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_set_target_pools_request_resource"] = { - "fingerprint": "fingerprint_value", - "target_pools": ["target_pools_value_1", "target_pools_value_2"], + request_init[ + "region_instance_group_manager_update_instance_config_req_resource" + ] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -6891,10 +11762,10 @@ def test_set_target_pools_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_target_pools_unary(request) + response = client.update_per_instance_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -6919,8 +11790,8 @@ def test_set_target_pools_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_target_pools_unary_rest_required_fields( - request_type=compute.SetTargetPoolsRegionInstanceGroupManagerRequest, +def test_update_per_instance_configs_rest_required_fields( + request_type=compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest, ): transport_class = transports.RegionInstanceGroupManagersRestTransport @@ -6939,7 +11810,7 @@ def test_set_target_pools_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_target_pools._get_unset_required_fields(jsonified_request) + ).update_per_instance_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -6950,7 +11821,7 @@ def test_set_target_pools_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_target_pools._get_unset_required_fields(jsonified_request) + ).update_per_instance_configs._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -6993,19 +11864,19 @@ def test_set_target_pools_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_target_pools_unary(request) + response = client.update_per_instance_configs(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_target_pools_unary_rest_unset_required_fields(): +def test_update_per_instance_configs_rest_unset_required_fields(): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_target_pools._get_unset_required_fields({}) + unset_fields = transport.update_per_instance_configs._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -7013,14 +11884,14 @@ def test_set_target_pools_unary_rest_unset_required_fields(): "instanceGroupManager", "project", "region", - "regionInstanceGroupManagersSetTargetPoolsRequestResource", + "regionInstanceGroupManagerUpdateInstanceConfigReqResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_target_pools_unary_rest_interceptors(null_interceptor): +def test_update_per_instance_configs_rest_interceptors(null_interceptor): transport = transports.RegionInstanceGroupManagersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -7033,9 +11904,11 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "post_set_target_pools" + transports.RegionInstanceGroupManagersRestInterceptor, + "post_update_per_instance_configs", ) as post, mock.patch.object( - transports.RegionInstanceGroupManagersRestInterceptor, "pre_set_target_pools" + transports.RegionInstanceGroupManagersRestInterceptor, + "pre_update_per_instance_configs", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -7052,7 +11925,7 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetTargetPoolsRegionInstanceGroupManagerRequest() + request = compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -7060,7 +11933,7 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_target_pools_unary( + client.update_per_instance_configs( request, metadata=[ ("key", "val"), @@ -7072,9 +11945,9 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_target_pools_unary_rest_bad_request( +def test_update_per_instance_configs_rest_bad_request( transport: str = "rest", - request_type=compute.SetTargetPoolsRegionInstanceGroupManagerRequest, + request_type=compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest, ): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7087,9 +11960,17 @@ def test_set_target_pools_unary_rest_bad_request( "region": "sample2", "instance_group_manager": "sample3", } - request_init["region_instance_group_managers_set_target_pools_request_resource"] = { - "fingerprint": "fingerprint_value", - "target_pools": ["target_pools_value_1", "target_pools_value_2"], + request_init[ + "region_instance_group_manager_update_instance_config_req_resource" + ] = { + "per_instance_configs": [ + { + "fingerprint": "fingerprint_value", + "name": "name_value", + "preserved_state": {"disks": {}, "metadata": {}}, + "status": "status_value", + } + ] } request = request_type(request_init) @@ -7102,10 +11983,10 @@ def test_set_target_pools_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_target_pools_unary(request) + client.update_per_instance_configs(request) -def test_set_target_pools_unary_rest_flattened(): +def test_update_per_instance_configs_rest_flattened(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -7128,8 +12009,10 @@ def test_set_target_pools_unary_rest_flattened(): project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_set_target_pools_request_resource=compute.RegionInstanceGroupManagersSetTargetPoolsRequest( - fingerprint="fingerprint_value" + region_instance_group_manager_update_instance_config_req_resource=compute.RegionInstanceGroupManagerUpdateInstanceConfigReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] ), ) mock_args.update(sample_request) @@ -7142,20 +12025,20 @@ def test_set_target_pools_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_target_pools_unary(**mock_args) + client.update_per_instance_configs(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/setTargetPools" + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroupManagers/{instance_group_manager}/updatePerInstanceConfigs" % client.transport._host, args[1], ) -def test_set_target_pools_unary_rest_flattened_error(transport: str = "rest"): +def test_update_per_instance_configs_rest_flattened_error(transport: str = "rest"): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7164,18 +12047,20 @@ def test_set_target_pools_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_target_pools_unary( - compute.SetTargetPoolsRegionInstanceGroupManagerRequest(), + client.update_per_instance_configs( + compute.UpdatePerInstanceConfigsRegionInstanceGroupManagerRequest(), project="project_value", region="region_value", instance_group_manager="instance_group_manager_value", - region_instance_group_managers_set_target_pools_request_resource=compute.RegionInstanceGroupManagersSetTargetPoolsRequest( - fingerprint="fingerprint_value" + region_instance_group_manager_update_instance_config_req_resource=compute.RegionInstanceGroupManagerUpdateInstanceConfigReq( + per_instance_configs=[ + compute.PerInstanceConfig(fingerprint="fingerprint_value") + ] ), ) -def test_set_target_pools_unary_rest_error(): +def test_update_per_instance_configs_rest_error(): client = RegionInstanceGroupManagersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -7252,28 +12137,6 @@ def test_update_per_instance_configs_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_per_instance_configs_unary_rest_required_fields( @@ -7629,6 +12492,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionInstanceGroupManagersClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_instance_group_managers_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -7678,6 +12554,14 @@ def test_region_instance_group_managers_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_instance_group_managers_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_instance_groups.py b/tests/unit/gapic/compute_v1/test_region_instance_groups.py index ccc74fbe1..6adeb584e 100644 --- a/tests/unit/gapic/compute_v1/test_region_instance_groups.py +++ b/tests/unit/gapic/compute_v1/test_region_instance_groups.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -1618,7 +1620,7 @@ def test_list_instances_rest_pager(transport: str = "rest"): dict, ], ) -def test_set_named_ports_unary_rest(request_type): +def test_set_named_ports_rest(request_type): client = RegionInstanceGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1670,10 +1672,10 @@ def test_set_named_ports_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_named_ports_unary(request) + response = client.set_named_ports(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1698,6 +1700,333 @@ def test_set_named_ports_unary_rest(request_type): assert response.zone == "zone_value" +def test_set_named_ports_rest_required_fields( + request_type=compute.SetNamedPortsRegionInstanceGroupRequest, +): + transport_class = transports.RegionInstanceGroupsRestTransport + + request_init = {} + request_init["instance_group"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_named_ports._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["instanceGroup"] = "instance_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_named_ports._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "instanceGroup" in jsonified_request + assert jsonified_request["instanceGroup"] == "instance_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_named_ports(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_named_ports_rest_unset_required_fields(): + transport = transports.RegionInstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_named_ports._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "instanceGroup", + "project", + "region", + "regionInstanceGroupsSetNamedPortsRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_named_ports_rest_interceptors(null_interceptor): + transport = transports.RegionInstanceGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstanceGroupsRestInterceptor(), + ) + client = RegionInstanceGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstanceGroupsRestInterceptor, "post_set_named_ports" + ) as post, mock.patch.object( + transports.RegionInstanceGroupsRestInterceptor, "pre_set_named_ports" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetNamedPortsRegionInstanceGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_named_ports( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_named_ports_rest_bad_request( + transport: str = "rest", + request_type=compute.SetNamedPortsRegionInstanceGroupRequest, +): + client = RegionInstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group": "sample3", + } + request_init["region_instance_groups_set_named_ports_request_resource"] = { + "fingerprint": "fingerprint_value", + "named_ports": [{"name": "name_value", "port": 453}], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_named_ports(request) + + +def test_set_named_ports_rest_flattened(): + client = RegionInstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "instance_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + instance_group="instance_group_value", + region_instance_groups_set_named_ports_request_resource=compute.RegionInstanceGroupsSetNamedPortsRequest( + fingerprint="fingerprint_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_named_ports(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instanceGroups/{instance_group}/setNamedPorts" + % client.transport._host, + args[1], + ) + + +def test_set_named_ports_rest_flattened_error(transport: str = "rest"): + client = RegionInstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_named_ports( + compute.SetNamedPortsRegionInstanceGroupRequest(), + project="project_value", + region="region_value", + instance_group="instance_group_value", + region_instance_groups_set_named_ports_request_resource=compute.RegionInstanceGroupsSetNamedPortsRequest( + fingerprint="fingerprint_value" + ), + ) + + +def test_set_named_ports_rest_error(): + client = RegionInstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetNamedPortsRegionInstanceGroupRequest, + dict, + ], +) +def test_set_named_ports_unary_rest(request_type): + client = RegionInstanceGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "instance_group": "sample3", + } + request_init["region_instance_groups_set_named_ports_request_resource"] = { + "fingerprint": "fingerprint_value", + "named_ports": [{"name": "name_value", "port": 453}], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_named_ports_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + def test_set_named_ports_unary_rest_required_fields( request_type=compute.SetNamedPortsRegionInstanceGroupRequest, ): @@ -2035,6 +2364,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionInstanceGroupsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_instance_groups_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2069,6 +2411,14 @@ def test_region_instance_groups_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_instance_groups_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_instances.py b/tests/unit/gapic/compute_v1/test_region_instances.py index 61e696f1e..f031db71e 100644 --- a/tests/unit/gapic/compute_v1/test_region_instances.py +++ b/tests/unit/gapic/compute_v1/test_region_instances.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -531,6 +533,645 @@ def test_region_instances_client_client_options_credentials_file( ) +@pytest.mark.parametrize( + "request_type", + [ + compute.BulkInsertRegionInstanceRequest, + dict, + ], +) +def test_bulk_insert_rest(request_type): + client = RegionInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["bulk_insert_instance_resource_resource"] = { + "count": 553, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "location_policy": {"locations": {}}, + "min_count": 972, + "name_pattern": "name_pattern_value", + "per_instance_properties": {}, + "source_instance_template": "source_instance_template_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.bulk_insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_bulk_insert_rest_required_fields( + request_type=compute.BulkInsertRegionInstanceRequest, +): + transport_class = transports.RegionInstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).bulk_insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).bulk_insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.bulk_insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_bulk_insert_rest_unset_required_fields(): + transport = transports.RegionInstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.bulk_insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "bulkInsertInstanceResourceResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_bulk_insert_rest_interceptors(null_interceptor): + transport = transports.RegionInstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionInstancesRestInterceptor(), + ) + client = RegionInstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionInstancesRestInterceptor, "post_bulk_insert" + ) as post, mock.patch.object( + transports.RegionInstancesRestInterceptor, "pre_bulk_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.BulkInsertRegionInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.bulk_insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_bulk_insert_rest_bad_request( + transport: str = "rest", request_type=compute.BulkInsertRegionInstanceRequest +): + client = RegionInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["bulk_insert_instance_resource_resource"] = { + "count": 553, + "instance_properties": { + "advanced_machine_features": { + "enable_nested_virtualization": True, + "enable_uefi_networking": True, + "threads_per_core": 1689, + }, + "can_ip_forward": True, + "confidential_instance_config": {"enable_confidential_compute": True}, + "description": "description_value", + "disks": [ + { + "auto_delete": True, + "boot": True, + "device_name": "device_name_value", + "disk_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "disk_size_gb": 1261, + "guest_os_features": [{"type_": "type__value"}], + "index": 536, + "initialize_params": { + "description": "description_value", + "disk_name": "disk_name_value", + "disk_size_gb": 1261, + "disk_type": "disk_type_value", + "labels": {}, + "licenses": ["licenses_value_1", "licenses_value_2"], + "on_update_action": "on_update_action_value", + "provisioned_iops": 1740, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "source_image": "source_image_value", + "source_image_encryption_key": {}, + "source_snapshot": "source_snapshot_value", + "source_snapshot_encryption_key": {}, + }, + "interface": "interface_value", + "kind": "kind_value", + "licenses": ["licenses_value_1", "licenses_value_2"], + "mode": "mode_value", + "shielded_instance_initial_state": { + "dbs": [ + {"content": "content_value", "file_type": "file_type_value"} + ], + "dbxs": {}, + "keks": {}, + "pk": {}, + }, + "source": "source_value", + "type_": "type__value", + } + ], + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "labels": {}, + "machine_type": "machine_type_value", + "metadata": { + "fingerprint": "fingerprint_value", + "items": [{"key": "key_value", "value": "value_value"}], + "kind": "kind_value", + }, + "min_cpu_platform": "min_cpu_platform_value", + "network_interfaces": [ + { + "access_configs": [ + { + "external_ipv6": "external_ipv6_value", + "external_ipv6_prefix_length": 2837, + "kind": "kind_value", + "name": "name_value", + "nat_i_p": "nat_i_p_value", + "network_tier": "network_tier_value", + "public_ptr_domain_name": "public_ptr_domain_name_value", + "set_public_ptr": True, + "type_": "type__value", + } + ], + "alias_ip_ranges": [ + { + "ip_cidr_range": "ip_cidr_range_value", + "subnetwork_range_name": "subnetwork_range_name_value", + } + ], + "fingerprint": "fingerprint_value", + "internal_ipv6_prefix_length": 2831, + "ipv6_access_configs": {}, + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_address": "ipv6_address_value", + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_i_p": "network_i_p_value", + "nic_type": "nic_type_value", + "queue_count": 1197, + "stack_type": "stack_type_value", + "subnetwork": "subnetwork_value", + } + ], + "network_performance_config": { + "total_egress_bandwidth_tier": "total_egress_bandwidth_tier_value" + }, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "reservation_affinity": { + "consume_reservation_type": "consume_reservation_type_value", + "key": "key_value", + "values": ["values_value_1", "values_value_2"], + }, + "resource_manager_tags": {}, + "resource_policies": [ + "resource_policies_value_1", + "resource_policies_value_2", + ], + "scheduling": { + "automatic_restart": True, + "instance_termination_action": "instance_termination_action_value", + "location_hint": "location_hint_value", + "min_node_cpus": 1379, + "node_affinities": [ + { + "key": "key_value", + "operator": "operator_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "on_host_maintenance": "on_host_maintenance_value", + "preemptible": True, + "provisioning_model": "provisioning_model_value", + }, + "service_accounts": [ + {"email": "email_value", "scopes": ["scopes_value_1", "scopes_value_2"]} + ], + "shielded_instance_config": { + "enable_integrity_monitoring": True, + "enable_secure_boot": True, + "enable_vtpm": True, + }, + "tags": { + "fingerprint": "fingerprint_value", + "items": ["items_value_1", "items_value_2"], + }, + }, + "location_policy": {"locations": {}}, + "min_count": 972, + "name_pattern": "name_pattern_value", + "per_instance_properties": {}, + "source_instance_template": "source_instance_template_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.bulk_insert(request) + + +def test_bulk_insert_rest_flattened(): + client = RegionInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( + count=553 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.bulk_insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/instances/bulkInsert" + % client.transport._host, + args[1], + ) + + +def test_bulk_insert_rest_flattened_error(transport: str = "rest"): + client = RegionInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.bulk_insert( + compute.BulkInsertRegionInstanceRequest(), + project="project_value", + region="region_value", + bulk_insert_instance_resource_resource=compute.BulkInsertInstanceResource( + count=553 + ), + ) + + +def test_bulk_insert_rest_error(): + client = RegionInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + @pytest.mark.parametrize( "request_type", [ @@ -745,28 +1386,6 @@ def test_bulk_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_bulk_insert_unary_rest_required_fields( @@ -1245,6 +1864,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionInstancesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_instances_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1274,6 +1906,14 @@ def test_region_instances_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_instances_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_network_endpoint_groups.py b/tests/unit/gapic/compute_v1/test_region_network_endpoint_groups.py index 2420386ea..3a6a89b43 100644 --- a/tests/unit/gapic/compute_v1/test_region_network_endpoint_groups.py +++ b/tests/unit/gapic/compute_v1/test_region_network_endpoint_groups.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -563,7 +565,7 @@ def test_region_network_endpoint_groups_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -611,10 +613,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -639,7 +641,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionNetworkEndpointGroupRequest, ): transport_class = transports.RegionNetworkEndpointGroupsRestTransport @@ -712,14 +714,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -738,7 +740,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -768,17 +770,645 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRegionNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteRegionNetworkEndpointGroupRequest, +): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "network_endpoint_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + network_endpoint_group="network_endpoint_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/networkEndpointGroups/{network_endpoint_group}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteRegionNetworkEndpointGroupRequest(), + project="project_value", + region="region_value", + network_endpoint_group="network_endpoint_group_value", + ) + + +def test_delete_rest_error(): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionNetworkEndpointGroupRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionNetworkEndpointGroupRequest, +): + transport_class = transports.RegionNetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.RegionNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "networkEndpointGroup", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkEndpointGroupsRestInterceptor(), + ) + client = RegionNetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkEndpointGroupsRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionNetworkEndpointGroupsRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRegionNetworkEndpointGroupRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteRegionNetworkEndpointGroupRequest, +): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "network_endpoint_group": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + network_endpoint_group="network_endpoint_group_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/networkEndpointGroups/{network_endpoint_group}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteRegionNetworkEndpointGroupRequest(), + project="project_value", + region="region_value", + network_endpoint_group="network_endpoint_group_value", + ) + + +def test_delete_unary_rest_error(): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRegionNetworkEndpointGroupRequest, + dict, + ], +) +def test_get_rest(request_type): + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "network_endpoint_group": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEndpointGroup( + creation_timestamp="creation_timestamp_value", + default_port=1289, + description="description_value", + id=205, + kind="kind_value", + name="name_value", + network="network_value", + network_endpoint_type="network_endpoint_type_value", + psc_target_service="psc_target_service_value", + region="region_value", + self_link="self_link_value", + size=443, + subnetwork="subnetwork_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NetworkEndpointGroup) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_port == 1289 + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.network_endpoint_type == "network_endpoint_type_value" + assert response.psc_target_service == "psc_target_service_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.size == 443 + assert response.subnetwork == "subnetwork_value" + assert response.zone == "zone_value" + + +def test_get_rest_required_fields( + request_type=compute.GetRegionNetworkEndpointGroupRequest, +): + transport_class = transports.RegionNetworkEndpointGroupsRestTransport + + request_init = {} + request_init["network_endpoint_group"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "networkEndpointGroup" in jsonified_request + assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkEndpointGroupsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.NetworkEndpointGroup() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.RegionNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "networkEndpointGroup", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkEndpointGroupsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkEndpointGroupsRestInterceptor(), + ) + client = RegionNetworkEndpointGroupsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkEndpointGroupsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.RegionNetworkEndpointGroupsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.NetworkEndpointGroup.to_json( + compute.NetworkEndpointGroup() + ) - request = compute.DeleteRegionNetworkEndpointGroupRequest() + request = compute.GetRegionNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.NetworkEndpointGroup - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -790,9 +1420,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.DeleteRegionNetworkEndpointGroupRequest, +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionNetworkEndpointGroupRequest ): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -816,10 +1445,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -828,7 +1457,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NetworkEndpointGroup() # get arguments that satisfy an http rule for this method sample_request = { @@ -848,12 +1477,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NetworkEndpointGroup.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -866,7 +1495,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -875,15 +1504,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRegionNetworkEndpointGroupRequest(), + client.get( + compute.GetRegionNetworkEndpointGroupRequest(), project="project_value", region="region_value", network_endpoint_group="network_endpoint_group_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -892,77 +1521,116 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionNetworkEndpointGroupRequest, + compute.InsertRegionNetworkEndpointGroupRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "network_endpoint_group": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["network_endpoint_group_resource"] = { + "annotations": {}, + "app_engine": { + "service": "service_value", + "url_mask": "url_mask_value", + "version": "version_value", + }, + "cloud_function": {"function": "function_value", "url_mask": "url_mask_value"}, + "cloud_run": { + "service": "service_value", + "tag": "tag_value", + "url_mask": "url_mask_value", + }, + "creation_timestamp": "creation_timestamp_value", + "default_port": 1289, + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_endpoint_type": "network_endpoint_type_value", + "psc_target_service": "psc_target_service_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_port=1289, description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - network_endpoint_type="network_endpoint_type_value", - psc_target_service="psc_target_service_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - size=443, - subnetwork="subnetwork_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NetworkEndpointGroup) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_port == 1289 assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.network_endpoint_type == "network_endpoint_type_value" - assert response.psc_target_service == "psc_target_service_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.size == 443 - assert response.subnetwork == "subnetwork_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields( - request_type=compute.GetRegionNetworkEndpointGroupRequest, +def test_insert_rest_required_fields( + request_type=compute.InsertRegionNetworkEndpointGroupRequest, ): transport_class = transports.RegionNetworkEndpointGroupsRestTransport request_init = {} - request_init["network_endpoint_group"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -976,23 +1644,22 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["networkEndpointGroup"] = "network_endpoint_group_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "networkEndpointGroup" in jsonified_request - assert jsonified_request["networkEndpointGroup"] == "network_endpoint_group_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -1005,7 +1672,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1016,35 +1683,36 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RegionNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "networkEndpointGroup", + "networkEndpointGroupResource", "project", "region", ) @@ -1053,7 +1721,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RegionNetworkEndpointGroupsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1066,9 +1734,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkEndpointGroupsRestInterceptor, "post_get" + transports.RegionNetworkEndpointGroupsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.RegionNetworkEndpointGroupsRestInterceptor, "pre_get" + transports.RegionNetworkEndpointGroupsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1083,19 +1751,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NetworkEndpointGroup.to_json( - compute.NetworkEndpointGroup() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionNetworkEndpointGroupRequest() + request = compute.InsertRegionNetworkEndpointGroupRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroup + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1107,8 +1773,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionNetworkEndpointGroupRequest +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertRegionNetworkEndpointGroupRequest, ): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1116,10 +1783,34 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "network_endpoint_group": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["network_endpoint_group_resource"] = { + "annotations": {}, + "app_engine": { + "service": "service_value", + "url_mask": "url_mask_value", + "version": "version_value", + }, + "cloud_function": {"function": "function_value", "url_mask": "url_mask_value"}, + "cloud_run": { + "service": "service_value", + "tag": "tag_value", + "url_mask": "url_mask_value", + }, + "creation_timestamp": "creation_timestamp_value", + "default_port": 1289, + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "network_endpoint_type": "network_endpoint_type_value", + "psc_target_service": "psc_target_service_value", + "region": "region_value", + "self_link": "self_link_value", + "size": 443, + "subnetwork": "subnetwork_value", + "zone": "zone_value", } request = request_type(request_init) @@ -1132,10 +1823,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1144,45 +1835,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NetworkEndpointGroup() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "network_endpoint_group": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - network_endpoint_group="network_endpoint_group_value", + network_endpoint_group_resource=compute.NetworkEndpointGroup( + annotations={"key_value": "value_value"} + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NetworkEndpointGroup.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/networkEndpointGroups/{network_endpoint_group}" + "%s/compute/v1/projects/{project}/regions/{region}/networkEndpointGroups" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1191,15 +1880,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionNetworkEndpointGroupRequest(), + client.insert( + compute.InsertRegionNetworkEndpointGroupRequest(), project="project_value", region="region_value", - network_endpoint_group="network_endpoint_group_value", + network_endpoint_group_resource=compute.NetworkEndpointGroup( + annotations={"key_value": "value_value"} + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = RegionNetworkEndpointGroupsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1288,28 +1979,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -2008,6 +2677,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionNetworkEndpointGroupsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_network_endpoint_groups_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2042,6 +2724,14 @@ def test_region_network_endpoint_groups_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_network_endpoint_groups_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_network_firewall_policies.py b/tests/unit/gapic/compute_v1/test_region_network_firewall_policies.py index 8a793d00c..9ccf89e2b 100644 --- a/tests/unit/gapic/compute_v1/test_region_network_firewall_policies.py +++ b/tests/unit/gapic/compute_v1/test_region_network_firewall_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -565,7 +567,7 @@ def test_region_network_firewall_policies_client_client_options_credentials_file dict, ], ) -def test_add_association_unary_rest(request_type): +def test_add_association_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -620,10 +622,10 @@ def test_add_association_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_association_unary(request) + response = client.add_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -648,7 +650,7 @@ def test_add_association_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_association_unary_rest_required_fields( +def test_add_association_rest_required_fields( request_type=compute.AddAssociationRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -727,14 +729,14 @@ def test_add_association_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_association_unary(request) + response = client.add_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_association_unary_rest_unset_required_fields(): +def test_add_association_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -759,7 +761,7 @@ def test_add_association_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_association_unary_rest_interceptors(null_interceptor): +def test_add_association_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -799,7 +801,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_association_unary( + client.add_association( request, metadata=[ ("key", "val"), @@ -811,7 +813,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_association_unary_rest_bad_request( +def test_add_association_rest_bad_request( transport: str = "rest", request_type=compute.AddAssociationRegionNetworkFirewallPolicyRequest, ): @@ -844,10 +846,10 @@ def test_add_association_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_association_unary(request) + client.add_association(request) -def test_add_association_unary_rest_flattened(): +def test_add_association_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -884,7 +886,7 @@ def test_add_association_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_association_unary(**mock_args) + client.add_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -897,7 +899,7 @@ def test_add_association_unary_rest_flattened(): ) -def test_add_association_unary_rest_flattened_error(transport: str = "rest"): +def test_add_association_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -906,7 +908,7 @@ def test_add_association_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_association_unary( + client.add_association( compute.AddAssociationRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", @@ -917,7 +919,7 @@ def test_add_association_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_association_unary_rest_error(): +def test_add_association_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -926,11 +928,11 @@ def test_add_association_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AddRuleRegionNetworkFirewallPolicyRequest, + compute.AddAssociationRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_add_rule_unary_rest(request_type): +def test_add_association_unary_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -942,33 +944,12 @@ def test_add_rule_unary_rest(request_type): "region": "sample2", "firewall_policy": "sample3", } - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], + request_init["firewall_policy_association_resource"] = { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", } request = request_type(request_init) @@ -1006,36 +987,14 @@ def test_add_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_association_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_add_rule_unary_rest_required_fields( - request_type=compute.AddRuleRegionNetworkFirewallPolicyRequest, +def test_add_association_unary_rest_required_fields( + request_type=compute.AddAssociationRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -1054,7 +1013,7 @@ def test_add_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_rule._get_unset_required_fields(jsonified_request) + ).add_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1065,12 +1024,11 @@ def test_add_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_rule._get_unset_required_fields(jsonified_request) + ).add_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "max_priority", - "min_priority", + "replace_existing_association", "request_id", ) ) @@ -1114,31 +1072,30 @@ def test_add_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_association_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_rule_unary_rest_unset_required_fields(): +def test_add_association_unary_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.add_rule._get_unset_required_fields({}) + unset_fields = transport.add_association._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "maxPriority", - "minPriority", + "replaceExistingAssociation", "requestId", ) ) & set( ( "firewallPolicy", - "firewallPolicyRuleResource", + "firewallPolicyAssociationResource", "project", "region", ) @@ -1147,7 +1104,7 @@ def test_add_rule_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_rule_unary_rest_interceptors(null_interceptor): +def test_add_association_unary_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1160,9 +1117,9 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_add_rule" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_add_association" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_add_rule" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_add_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1179,7 +1136,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AddRuleRegionNetworkFirewallPolicyRequest() + request = compute.AddAssociationRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1187,7 +1144,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_rule_unary( + client.add_association_unary( request, metadata=[ ("key", "val"), @@ -1199,9 +1156,9 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_rule_unary_rest_bad_request( +def test_add_association_unary_rest_bad_request( transport: str = "rest", - request_type=compute.AddRuleRegionNetworkFirewallPolicyRequest, + request_type=compute.AddAssociationRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1214,33 +1171,12 @@ def test_add_rule_unary_rest_bad_request( "region": "sample2", "firewall_policy": "sample3", } - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], + request_init["firewall_policy_association_resource"] = { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", } request = request_type(request_init) @@ -1253,10 +1189,10 @@ def test_add_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_rule_unary(request) + client.add_association_unary(request) -def test_add_rule_unary_rest_flattened(): +def test_add_association_unary_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1279,8 +1215,8 @@ def test_add_rule_unary_rest_flattened(): project="project_value", region="region_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" + firewall_policy_association_resource=compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" ), ) mock_args.update(sample_request) @@ -1293,20 +1229,20 @@ def test_add_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_rule_unary(**mock_args) + client.add_association_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/addRule" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/addAssociation" % client.transport._host, args[1], ) -def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_add_association_unary_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1315,18 +1251,18 @@ def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_rule_unary( - compute.AddRuleRegionNetworkFirewallPolicyRequest(), + client.add_association_unary( + compute.AddAssociationRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" + firewall_policy_association_resource=compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" ), ) -def test_add_rule_unary_rest_error(): +def test_add_association_unary_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1335,11 +1271,11 @@ def test_add_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.CloneRulesRegionNetworkFirewallPolicyRequest, + compute.AddRuleRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_clone_rules_unary_rest(request_type): +def test_add_rule_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1351,6 +1287,34 @@ def test_clone_rules_unary_rest(request_type): "region": "sample2", "firewall_policy": "sample3", } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1387,10 +1351,10 @@ def test_clone_rules_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.clone_rules_unary(request) + response = client.add_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1415,8 +1379,8 @@ def test_clone_rules_unary_rest(request_type): assert response.zone == "zone_value" -def test_clone_rules_unary_rest_required_fields( - request_type=compute.CloneRulesRegionNetworkFirewallPolicyRequest, +def test_add_rule_rest_required_fields( + request_type=compute.AddRuleRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -1435,7 +1399,7 @@ def test_clone_rules_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).clone_rules._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1446,12 +1410,13 @@ def test_clone_rules_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).clone_rules._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( + "max_priority", + "min_priority", "request_id", - "source_firewall_policy", ) ) jsonified_request.update(unset_fields) @@ -1485,6 +1450,7 @@ def test_clone_rules_unary_rest_required_fields( "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1493,29 +1459,31 @@ def test_clone_rules_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.clone_rules_unary(request) + response = client.add_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_clone_rules_unary_rest_unset_required_fields(): +def test_add_rule_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.clone_rules._get_unset_required_fields({}) + unset_fields = transport.add_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( + "maxPriority", + "minPriority", "requestId", - "sourceFirewallPolicy", ) ) & set( ( "firewallPolicy", + "firewallPolicyRuleResource", "project", "region", ) @@ -1524,7 +1492,7 @@ def test_clone_rules_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_clone_rules_unary_rest_interceptors(null_interceptor): +def test_add_rule_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1537,9 +1505,9 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_clone_rules" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_clone_rules" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1556,7 +1524,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.CloneRulesRegionNetworkFirewallPolicyRequest() + request = compute.AddRuleRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1564,7 +1532,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.clone_rules_unary( + client.add_rule( request, metadata=[ ("key", "val"), @@ -1576,9 +1544,9 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_clone_rules_unary_rest_bad_request( +def test_add_rule_rest_bad_request( transport: str = "rest", - request_type=compute.CloneRulesRegionNetworkFirewallPolicyRequest, + request_type=compute.AddRuleRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1591,30 +1559,58 @@ def test_clone_rules_unary_rest_bad_request( "region": "sample2", "firewall_policy": "sample3", } - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.clone_rules_unary(request) - - -def test_clone_rules_unary_rest_flattened(): - client = RegionNetworkFirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation() + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.add_rule(request) + + +def test_add_rule_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1628,6 +1624,9 @@ def test_clone_rules_unary_rest_flattened(): project="project_value", region="region_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -1639,20 +1638,20 @@ def test_clone_rules_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.clone_rules_unary(**mock_args) + client.add_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/cloneRules" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/addRule" % client.transport._host, args[1], ) -def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1661,15 +1660,18 @@ def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.clone_rules_unary( - compute.CloneRulesRegionNetworkFirewallPolicyRequest(), + client.add_rule( + compute.AddRuleRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_clone_rules_unary_rest_error(): +def test_add_rule_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1678,11 +1680,11 @@ def test_clone_rules_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.DeleteRegionNetworkFirewallPolicyRequest, + compute.AddRuleRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_add_rule_unary_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1694,6 +1696,34 @@ def test_delete_unary_rest(request_type): "region": "sample2", "firewall_policy": "sample3", } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1730,36 +1760,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_rule_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteRegionNetworkFirewallPolicyRequest, +def test_add_rule_unary_rest_required_fields( + request_type=compute.AddRuleRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -1778,7 +1786,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1789,9 +1797,15 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "max_priority", + "min_priority", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1820,9 +1834,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1831,24 +1846,31 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_rule_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_add_rule_unary_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.add_rule._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "maxPriority", + "minPriority", + "requestId", + ) + ) & set( ( "firewallPolicy", + "firewallPolicyRuleResource", "project", "region", ) @@ -1857,7 +1879,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_add_rule_unary_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1870,9 +1892,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_delete" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_delete" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1889,7 +1911,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteRegionNetworkFirewallPolicyRequest() + request = compute.AddRuleRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1897,7 +1919,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.add_rule_unary( request, metadata=[ ("key", "val"), @@ -1909,9 +1931,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_add_rule_unary_rest_bad_request( transport: str = "rest", - request_type=compute.DeleteRegionNetworkFirewallPolicyRequest, + request_type=compute.AddRuleRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1924,6 +1946,34 @@ def test_delete_unary_rest_bad_request( "region": "sample2", "firewall_policy": "sample3", } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1935,10 +1985,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.add_rule_unary(request) -def test_delete_unary_rest_flattened(): +def test_add_rule_unary_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1961,6 +2011,9 @@ def test_delete_unary_rest_flattened(): project="project_value", region="region_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) @@ -1972,20 +2025,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.add_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/addRule" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1994,15 +2047,18 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRegionNetworkFirewallPolicyRequest(), + client.add_rule_unary( + compute.AddRuleRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_delete_unary_rest_error(): +def test_add_rule_unary_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2011,11 +2067,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionNetworkFirewallPolicyRequest, + compute.CloneRulesRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_get_rest(request_type): +def test_clone_rules_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2032,49 +2088,67 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - display_name="display_name_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - parent="parent_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - rule_tuple_count=1737, self_link="self_link_value", - self_link_with_id="self_link_with_id_value", - short_name="short_name_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.clone_rules(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicy) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.display_name == "display_name_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.parent == "parent_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" - assert response.rule_tuple_count == 1737 assert response.self_link == "self_link_value" - assert response.self_link_with_id == "self_link_with_id_value" - assert response.short_name == "short_name_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields( - request_type=compute.GetRegionNetworkFirewallPolicyRequest, +def test_clone_rules_rest_required_fields( + request_type=compute.CloneRulesRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -2093,7 +2167,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2104,7 +2178,14 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "source_firewall_policy", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2122,7 +2203,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2133,32 +2214,37 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.clone_rules(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_clone_rules_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.clone_rules._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "requestId", + "sourceFirewallPolicy", + ) + ) & set( ( "firewallPolicy", @@ -2170,7 +2256,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_clone_rules_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2183,9 +2269,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_clone_rules" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_clone_rules" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2200,19 +2286,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicy.to_json( - compute.FirewallPolicy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionNetworkFirewallPolicyRequest() + request = compute.CloneRulesRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicy + post.return_value = compute.Operation - client.get( + client.clone_rules( request, metadata=[ ("key", "val"), @@ -2224,8 +2308,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionNetworkFirewallPolicyRequest +def test_clone_rules_rest_bad_request( + transport: str = "rest", + request_type=compute.CloneRulesRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2249,10 +2334,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.clone_rules(request) -def test_get_rest_flattened(): +def test_clone_rules_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2261,7 +2346,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -2281,25 +2366,25 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.clone_rules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/cloneRules" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_clone_rules_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2308,15 +2393,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionNetworkFirewallPolicyRequest(), + client.clone_rules( + compute.CloneRulesRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", ) -def test_get_rest_error(): +def test_clone_rules_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2325,11 +2410,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetAssociationRegionNetworkFirewallPolicyRequest, + compute.CloneRulesRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_get_association_rest(request_type): +def test_clone_rules_unary_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2346,33 +2431,45 @@ def test_get_association_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value", - display_name="display_name_value", - firewall_policy_id="firewall_policy_id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", name="name_value", - short_name="short_name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_association(request) + response = client.clone_rules_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicyAssociation) - assert response.attachment_target == "attachment_target_value" - assert response.display_name == "display_name_value" - assert response.firewall_policy_id == "firewall_policy_id_value" - assert response.name == "name_value" - assert response.short_name == "short_name_value" + assert isinstance(response, compute.Operation) -def test_get_association_rest_required_fields( - request_type=compute.GetAssociationRegionNetworkFirewallPolicyRequest, +def test_clone_rules_unary_rest_required_fields( + request_type=compute.CloneRulesRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -2391,7 +2488,7 @@ def test_get_association_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_association._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2402,9 +2499,14 @@ def test_get_association_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_association._get_unset_required_fields(jsonified_request) + ).clone_rules._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("name",)) + assert not set(unset_fields) - set( + ( + "request_id", + "source_firewall_policy", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2422,7 +2524,7 @@ def test_get_association_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2433,32 +2535,37 @@ def test_get_association_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_association(request) + response = client.clone_rules_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_association_rest_unset_required_fields(): +def test_clone_rules_unary_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_association._get_unset_required_fields({}) + unset_fields = transport.clone_rules._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("name",)) + set( + ( + "requestId", + "sourceFirewallPolicy", + ) + ) & set( ( "firewallPolicy", @@ -2470,7 +2577,7 @@ def test_get_association_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_association_rest_interceptors(null_interceptor): +def test_clone_rules_unary_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2483,9 +2590,9 @@ def test_get_association_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get_association" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_clone_rules" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get_association" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_clone_rules" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2500,19 +2607,17 @@ def test_get_association_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyAssociation.to_json( - compute.FirewallPolicyAssociation() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetAssociationRegionNetworkFirewallPolicyRequest() + request = compute.CloneRulesRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyAssociation + post.return_value = compute.Operation - client.get_association( + client.clone_rules_unary( request, metadata=[ ("key", "val"), @@ -2524,9 +2629,9 @@ def test_get_association_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_association_rest_bad_request( +def test_clone_rules_unary_rest_bad_request( transport: str = "rest", - request_type=compute.GetAssociationRegionNetworkFirewallPolicyRequest, + request_type=compute.CloneRulesRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2550,10 +2655,10 @@ def test_get_association_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_association(request) + client.clone_rules_unary(request) -def test_get_association_rest_flattened(): +def test_clone_rules_unary_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2562,7 +2667,7 @@ def test_get_association_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyAssociation() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -2582,25 +2687,25 @@ def test_get_association_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_association(**mock_args) + client.clone_rules_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/getAssociation" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/cloneRules" % client.transport._host, args[1], ) -def test_get_association_rest_flattened_error(transport: str = "rest"): +def test_clone_rules_unary_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2609,15 +2714,15 @@ def test_get_association_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_association( - compute.GetAssociationRegionNetworkFirewallPolicyRequest(), + client.clone_rules_unary( + compute.CloneRulesRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", ) -def test_get_association_rest_error(): +def test_clone_rules_unary_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2626,87 +2731,125 @@ def test_get_association_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, + compute.DeleteRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_get_effective_firewalls_rest(request_type): +def test_delete_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_effective_firewalls(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance( - response, compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse - ) - - -def test_get_effective_firewalls_rest_required_fields( - request_type=compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, -): - transport_class = transports.RegionNetworkFirewallPoliciesRestTransport - - request_init = {} - request_init["network"] = "" - request_init["project"] = "" - request_init["region"] = "" - request = request_type(request_init) - jsonified_request = json.loads( - request_type.to_json( - request, including_default_value_fields=False, use_integers_for_enums=False - ) - ) - - # verify fields with default values are dropped - assert "network" not in jsonified_request + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_delete_rest_required_fields( + request_type=compute.DeleteRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "network" in jsonified_request - assert jsonified_request["network"] == request_init["network"] - jsonified_request["network"] = "network_value" + jsonified_request["firewallPolicy"] = "firewall_policy_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_effective_firewalls._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("network",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "network" in jsonified_request - assert jsonified_request["network"] == "network_value" + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -2719,7 +2862,7 @@ def test_get_effective_firewalls_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2730,42 +2873,35 @@ def test_get_effective_firewalls_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_effective_firewalls(request) + response = client.delete(request) - expected_params = [ - ( - "network", - "", - ), - ] + expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_effective_firewalls_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_effective_firewalls._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("network",)) + set(("requestId",)) & set( ( - "network", + "firewallPolicy", "project", "region", ) @@ -2774,7 +2910,7 @@ def test_get_effective_firewalls_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_effective_firewalls_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2787,11 +2923,9 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, - "post_get_effective_firewalls", + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, - "pre_get_effective_firewalls", + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2806,23 +2940,17 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest() + request = compute.DeleteRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse - ) + post.return_value = compute.Operation - client.get_effective_firewalls( + client.delete( request, metadata=[ ("key", "val"), @@ -2834,9 +2962,9 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_effective_firewalls_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", - request_type=compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, + request_type=compute.DeleteRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2844,7 +2972,11 @@ def test_get_effective_firewalls_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2856,10 +2988,10 @@ def test_get_effective_firewalls_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_effective_firewalls(request) + client.delete(request) -def test_get_effective_firewalls_rest_flattened(): +def test_delete_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2868,47 +3000,45 @@ def test_get_effective_firewalls_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() - ) + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - network="network_value", + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_effective_firewalls(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/getEffectiveFirewalls" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2917,15 +3047,15 @@ def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_effective_firewalls( - compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest(), + client.delete( + compute.DeleteRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", - network="network_value", + firewall_policy="firewall_policy_value", ) -def test_get_effective_firewalls_rest_error(): +def test_delete_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2934,53 +3064,73 @@ def test_get_effective_firewalls_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, + compute.DeleteRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.Operation) -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport request_init = {} + request_init["firewall_policy"] = "" request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2992,29 +3142,29 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewallPolicy"] = "firewall_policy_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3023,7 +3173,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3034,44 +3184,44 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( + "firewallPolicy", "project", "region", - "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3084,9 +3234,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get_iam_policy" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get_iam_policy" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3101,17 +3251,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyRegionNetworkFirewallPolicyRequest() + request = compute.DeleteRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -3123,9 +3273,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( +def test_delete_unary_rest_bad_request( transport: str = "rest", - request_type=compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, + request_type=compute.DeleteRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3133,7 +3283,11 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3145,10 +3299,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.delete_unary(request) -def test_get_iam_policy_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3157,45 +3311,45 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "region": "sample2", - "resource": "sample3", + "firewall_policy": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3204,15 +3358,15 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyRegionNetworkFirewallPolicyRequest(), + client.delete_unary( + compute.DeleteRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", - resource="resource_value", + firewall_policy="firewall_policy_value", ) -def test_get_iam_policy_rest_error(): +def test_delete_unary_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3221,11 +3375,11 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRuleRegionNetworkFirewallPolicyRequest, + compute.GetRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_get_rule_rest(request_type): +def test_get_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3242,45 +3396,49 @@ def test_get_rule_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule( - action="action_value", + return_value = compute.FirewallPolicy( + creation_timestamp="creation_timestamp_value", description="description_value", - direction="direction_value", - disabled=True, - enable_logging=True, + display_name="display_name_value", + fingerprint="fingerprint_value", + id=205, kind="kind_value", - priority=898, - rule_name="rule_name_value", + name="name_value", + parent="parent_value", + region="region_value", rule_tuple_count=1737, - target_resources=["target_resources_value"], - target_service_accounts=["target_service_accounts_value"], + self_link="self_link_value", + self_link_with_id="self_link_with_id_value", + short_name="short_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.FirewallPolicyRule) - assert response.action == "action_value" + assert isinstance(response, compute.FirewallPolicy) + assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.direction == "direction_value" - assert response.disabled is True - assert response.enable_logging is True + assert response.display_name == "display_name_value" + assert response.fingerprint == "fingerprint_value" + assert response.id == 205 assert response.kind == "kind_value" - assert response.priority == 898 - assert response.rule_name == "rule_name_value" + assert response.name == "name_value" + assert response.parent == "parent_value" + assert response.region == "region_value" assert response.rule_tuple_count == 1737 - assert response.target_resources == ["target_resources_value"] - assert response.target_service_accounts == ["target_service_accounts_value"] + assert response.self_link == "self_link_value" + assert response.self_link_with_id == "self_link_with_id_value" + assert response.short_name == "short_name_value" -def test_get_rule_rest_required_fields( - request_type=compute.GetRuleRegionNetworkFirewallPolicyRequest, +def test_get_rest_required_fields( + request_type=compute.GetRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -3299,7 +3457,7 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3310,9 +3468,7 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("priority",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3330,7 +3486,7 @@ def test_get_rule_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule() + return_value = compute.FirewallPolicy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3348,25 +3504,25 @@ def test_get_rule_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rule_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_rule._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("priority",)) + set(()) & set( ( "firewallPolicy", @@ -3378,7 +3534,7 @@ def test_get_rule_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rule_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3391,9 +3547,9 @@ def test_get_rule_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get_rule" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get_rule" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3408,19 +3564,19 @@ def test_get_rule_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyRule.to_json( - compute.FirewallPolicyRule() + req.return_value._content = compute.FirewallPolicy.to_json( + compute.FirewallPolicy() ) - request = compute.GetRuleRegionNetworkFirewallPolicyRequest() + request = compute.GetRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyRule + post.return_value = compute.FirewallPolicy - client.get_rule( + client.get( request, metadata=[ ("key", "val"), @@ -3432,9 +3588,8 @@ def test_get_rule_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rule_rest_bad_request( - transport: str = "rest", - request_type=compute.GetRuleRegionNetworkFirewallPolicyRequest, +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionNetworkFirewallPolicyRequest ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3458,10 +3613,10 @@ def test_get_rule_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_rule(request) + client.get(request) -def test_get_rule_rest_flattened(): +def test_get_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3470,7 +3625,7 @@ def test_get_rule_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyRule() + return_value = compute.FirewallPolicy() # get arguments that satisfy an http rule for this method sample_request = { @@ -3490,25 +3645,25 @@ def test_get_rule_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyRule.to_json(return_value) + json_return_value = compute.FirewallPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_rule(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/getRule" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" % client.transport._host, args[1], ) -def test_get_rule_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3517,15 +3672,15 @@ def test_get_rule_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_rule( - compute.GetRuleRegionNetworkFirewallPolicyRequest(), + client.get( + compute.GetRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", ) -def test_get_rule_rest_error(): +def test_get_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3534,148 +3689,59 @@ def test_get_rule_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionNetworkFirewallPolicyRequest, + compute.GetAssociationRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_association_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", + return_value = compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value", + display_name="display_name_value", + firewall_policy_id="firewall_policy_id_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + short_name="short_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" + assert isinstance(response, compute.FirewallPolicyAssociation) + assert response.attachment_target == "attachment_target_value" + assert response.display_name == "display_name_value" + assert response.firewall_policy_id == "firewall_policy_id_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.short_name == "short_name_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionNetworkFirewallPolicyRequest, +def test_get_association_rest_required_fields( + request_type=compute.GetAssociationRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport request_init = {} + request_init["firewall_policy"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -3689,22 +3755,25 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + jsonified_request["firewallPolicy"] = "firewall_policy_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("name",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -3717,7 +3786,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.FirewallPolicyAssociation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3728,36 +3797,35 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_association_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_association._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("name",)) & set( ( - "firewallPolicyResource", + "firewallPolicy", "project", "region", ) @@ -3766,7 +3834,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_association_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3779,9 +3847,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_insert" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get_association" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_insert" + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get_association" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3796,17 +3864,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.FirewallPolicyAssociation.to_json( + compute.FirewallPolicyAssociation() + ) - request = compute.InsertRegionNetworkFirewallPolicyRequest() + request = compute.GetAssociationRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.FirewallPolicyAssociation - client.insert_unary( + client.get_association( request, metadata=[ ("key", "val"), @@ -3818,9 +3888,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( +def test_get_association_rest_bad_request( transport: str = "rest", - request_type=compute.InsertRegionNetworkFirewallPolicyRequest, + request_type=compute.GetAssociationRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3828,66 +3898,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", } request = request_type(request_init) @@ -3900,10 +3914,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get_association(request) -def test_insert_unary_rest_flattened(): +def test_get_association_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3912,47 +3926,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.FirewallPolicyAssociation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), + firewall_policy="firewall_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.FirewallPolicyAssociation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/getAssociation" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_association_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3961,21 +3973,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionNetworkFirewallPolicyRequest(), + client.get_association( + compute.GetAssociationRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), + firewall_policy="firewall_policy_value", ) -def test_insert_unary_rest_error(): +def test_get_association_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3984,11 +3990,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionNetworkFirewallPoliciesRequest, + compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_effective_firewalls_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4001,33 +4007,35 @@ def test_list_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", + return_value = ( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = ( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( + return_value + ) + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_effective_firewalls(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert isinstance( + response, compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse + ) -def test_list_rest_required_fields( - request_type=compute.ListRegionNetworkFirewallPoliciesRequest, +def test_get_effective_firewalls_rest_required_fields( + request_type=compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport request_init = {} + request_init["network"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -4038,33 +4046,31 @@ def test_list_rest_required_fields( ) # verify fields with default values are dropped + assert "network" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_effective_firewalls._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present + assert "network" in jsonified_request + assert jsonified_request["network"] == request_init["network"] + jsonified_request["network"] = "network_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_effective_firewalls._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("network",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone + assert "network" in jsonified_request + assert jsonified_request["network"] == "network_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -4077,7 +4083,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList() + return_value = compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -4095,35 +4101,35 @@ def test_list_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_effective_firewalls(request) - expected_params = [] + expected_params = [ + ( + "network", + "", + ), + ] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_effective_firewalls_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get_effective_firewalls._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("network",)) & set( ( + "network", "project", "region", ) @@ -4132,7 +4138,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_effective_firewalls_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4145,9 +4151,11 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_list" + transports.RegionNetworkFirewallPoliciesRestInterceptor, + "post_get_effective_firewalls", ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_list" + transports.RegionNetworkFirewallPoliciesRestInterceptor, + "pre_get_effective_firewalls", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4162,19 +4170,23 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.FirewallPolicyList.to_json( - compute.FirewallPolicyList() + req.return_value._content = ( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() + ) ) - request = compute.ListRegionNetworkFirewallPoliciesRequest() + request = compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyList + post.return_value = ( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse + ) - client.list( + client.get_effective_firewalls( request, metadata=[ ("key", "val"), @@ -4186,9 +4198,9 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( +def test_get_effective_firewalls_rest_bad_request( transport: str = "rest", - request_type=compute.ListRegionNetworkFirewallPoliciesRequest, + request_type=compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4208,10 +4220,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get_effective_firewalls(request) -def test_list_rest_flattened(): +def test_get_effective_firewalls_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4220,7 +4232,9 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.FirewallPolicyList() + return_value = ( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() + ) # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -4229,31 +4243,3568 @@ def test_list_rest_flattened(): mock_args = dict( project="project_value", region="region_value", + network="network_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse.to_json( + return_value + ) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_effective_firewalls(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/getEffectiveFirewalls" + % client.transport._host, + args[1], + ) + + +def test_get_effective_firewalls_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_effective_firewalls( + compute.GetEffectiveFirewallsRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + network="network_value", + ) + + +def test_get_effective_firewalls_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "region", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", + request_type=compute.GetIamPolicyRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRuleRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_get_rule_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule( + action="action_value", + description="description_value", + direction="direction_value", + disabled=True, + enable_logging=True, + kind="kind_value", + priority=898, + rule_name="rule_name_value", + rule_tuple_count=1737, + target_resources=["target_resources_value"], + target_service_accounts=["target_service_accounts_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.FirewallPolicyRule) + assert response.action == "action_value" + assert response.description == "description_value" + assert response.direction == "direction_value" + assert response.disabled is True + assert response.enable_logging is True + assert response.kind == "kind_value" + assert response.priority == 898 + assert response.rule_name == "rule_name_value" + assert response.rule_tuple_count == 1737 + assert response.target_resources == ["target_resources_value"] + assert response.target_service_accounts == ["target_service_accounts_value"] + + +def test_get_rule_rest_required_fields( + request_type=compute.GetRuleRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("priority",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rule_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("priority",)) + & set( + ( + "firewallPolicy", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rule_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_get_rule" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_get_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyRule.to_json( + compute.FirewallPolicyRule() + ) + + request = compute.GetRuleRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyRule + + client.get_rule( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rule_rest_bad_request( + transport: str = "rest", + request_type=compute.GetRuleRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_rule(request) + + +def test_get_rule_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyRule() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyRule.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_rule(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/getRule" + % client.transport._host, + args[1], + ) + + +def test_get_rule_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_rule( + compute.GetRuleRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + ) + + +def test_get_rule_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicyResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_insert_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicyResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionNetworkFirewallPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionNetworkFirewallPoliciesRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.FirewallPolicyList.to_json( + compute.FirewallPolicyList() + ) + + request = compute.ListRegionNetworkFirewallPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.FirewallPolicyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", + request_type=compute.ListRegionNetworkFirewallPoliciesRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.FirewallPolicyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.FirewallPolicyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionNetworkFirewallPoliciesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + compute.FirewallPolicy(), + compute.FirewallPolicy(), + ], + next_page_token="abc", + ), + compute.FirewallPolicyList( + items=[], + next_page_token="def", + ), + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + ], + next_page_token="ghi", + ), + compute.FirewallPolicyList( + items=[ + compute.FirewallPolicy(), + compute.FirewallPolicy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.FirewallPolicyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.FirewallPolicy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_patch_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "firewallPolicy", + "firewallPolicyResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_resource"] = { + "associations": [ + { + "attachment_target": "attachment_target_value", + "display_name": "display_name_value", + "firewall_policy_id": "firewall_policy_id_value", + "name": "name_value", + "short_name": "short_name_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "display_name": "display_name_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "parent": "parent_value", + "region": "region_value", + "rule_tuple_count": 1737, + "rules": [ + { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": [ + "dest_ip_ranges_value_1", + "dest_ip_ranges_value_2", + ], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": [ + "target_resources_value_1", + "target_resources_value_2", + ], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + ], + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "short_name": "short_name_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_resource=compute.FirewallPolicy( + associations=[ + compute.FirewallPolicyAssociation( + attachment_target="attachment_target_value" + ) + ] + ), + ) + + +def test_patch_unary_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRuleRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_rule_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rule_rest_required_fields( + request_type=compute.PatchRuleRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "priority", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rule_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "priority", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rule_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_patch_rule" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_patch_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRuleRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_rule( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rule_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchRuleRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_rule(request) + + +def test_patch_rule_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_rule(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/patchRule" + % client.transport._host, + args[1], + ) + + +def test_patch_rule_rest_flattened_error(transport: str = "rest"): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_rule( + compute.PatchRuleRegionNetworkFirewallPolicyRequest(), + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), + ) + + +def test_patch_rule_rest_error(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRuleRegionNetworkFirewallPolicyRequest, + dict, + ], +) +def test_patch_rule_unary_rest(request_type): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_rule_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_rule_unary_rest_required_fields( + request_type=compute.PatchRuleRegionNetworkFirewallPolicyRequest, +): + transport_class = transports.RegionNetworkFirewallPoliciesRestTransport + + request_init = {} + request_init["firewall_policy"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["firewallPolicy"] = "firewall_policy_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "priority", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "firewallPolicy" in jsonified_request + assert jsonified_request["firewallPolicy"] == "firewall_policy_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_rule_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rule_unary_rest_unset_required_fields(): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "priority", + "requestId", + ) + ) + & set( + ( + "firewallPolicy", + "firewallPolicyRuleResource", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rule_unary_rest_interceptors(null_interceptor): + transport = transports.RegionNetworkFirewallPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNetworkFirewallPoliciesRestInterceptor(), + ) + client = RegionNetworkFirewallPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_patch_rule" + ) as post, mock.patch.object( + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_patch_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRuleRegionNetworkFirewallPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_rule_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rule_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.PatchRuleRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + request_init["firewall_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "direction": "direction_value", + "disabled": True, + "enable_logging": True, + "kind": "kind_value", + "match": { + "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], + "layer4_configs": [ + { + "ip_protocol": "ip_protocol_value", + "ports": ["ports_value_1", "ports_value_2"], + } + ], + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], + "src_secure_tags": [{"name": "name_value", "state": "state_value"}], + }, + "priority": 898, + "rule_name": "rule_name_value", + "rule_tuple_count": 1737, + "target_resources": ["target_resources_value_1", "target_resources_value_2"], + "target_secure_tags": {}, + "target_service_accounts": [ + "target_service_accounts_value_1", + "target_service_accounts_value_2", + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_rule_unary(request) + + +def test_patch_rule_unary_rest_flattened(): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.FirewallPolicyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/patchRule" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4262,82 +7813,31 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionNetworkFirewallPoliciesRequest(), + client.patch_rule_unary( + compute.PatchRuleRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", + firewall_policy="firewall_policy_value", + firewall_policy_rule_resource=compute.FirewallPolicyRule( + action="action_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rule_unary_rest_error(): client = RegionNetworkFirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - compute.FirewallPolicy(), - compute.FirewallPolicy(), - ], - next_page_token="abc", - ), - compute.FirewallPolicyList( - items=[], - next_page_token="def", - ), - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - ], - next_page_token="ghi", - ), - compute.FirewallPolicyList( - items=[ - compute.FirewallPolicy(), - compute.FirewallPolicy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.FirewallPolicyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.FirewallPolicy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionNetworkFirewallPolicyRequest, + compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_remove_association_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4349,66 +7849,6 @@ def test_patch_unary_rest(request_type): "region": "sample2", "firewall_policy": "sample3", } - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -4445,10 +7885,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.remove_association(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -4473,8 +7913,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionNetworkFirewallPolicyRequest, +def test_remove_association_rest_required_fields( + request_type=compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -4493,7 +7933,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4504,9 +7944,14 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "name", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -4535,10 +7980,9 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -4547,25 +7991,29 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.remove_association(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_remove_association_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.remove_association._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "name", + "requestId", + ) + ) & set( ( "firewallPolicy", - "firewallPolicyResource", "project", "region", ) @@ -4574,7 +8022,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_remove_association_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -4587,9 +8035,11 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_patch" + transports.RegionNetworkFirewallPoliciesRestInterceptor, + "post_remove_association", ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_patch" + transports.RegionNetworkFirewallPoliciesRestInterceptor, + "pre_remove_association", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -4606,7 +8056,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRegionNetworkFirewallPolicyRequest() + request = compute.RemoveAssociationRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -4614,7 +8064,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.remove_association( request, metadata=[ ("key", "val"), @@ -4626,80 +8076,20 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( +def test_remove_association_rest_bad_request( transport: str = "rest", - request_type=compute.PatchRegionNetworkFirewallPolicyRequest, -): - client = RegionNetworkFirewallPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "firewall_policy": "sample3", - } - request_init["firewall_policy_resource"] = { - "associations": [ - { - "attachment_target": "attachment_target_value", - "display_name": "display_name_value", - "firewall_policy_id": "firewall_policy_id_value", - "name": "name_value", - "short_name": "short_name_value", - } - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "display_name": "display_name_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "parent": "parent_value", - "region": "region_value", - "rule_tuple_count": 1737, - "rules": [ - { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": [ - "dest_ip_ranges_value_1", - "dest_ip_ranges_value_2", - ], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": [ - "target_resources_value_1", - "target_resources_value_2", - ], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } - ], - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "short_name": "short_name_value", + request_type=compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, +): + client = RegionNetworkFirewallPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "firewall_policy": "sample3", } request = request_type(request_init) @@ -4712,10 +8102,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.remove_association(request) -def test_patch_unary_rest_flattened(): +def test_remove_association_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4738,13 +8128,6 @@ def test_patch_unary_rest_flattened(): project="project_value", region="region_value", firewall_policy="firewall_policy_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), ) mock_args.update(sample_request) @@ -4756,20 +8139,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.remove_association(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/removeAssociation" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_association_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4778,22 +8161,15 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionNetworkFirewallPolicyRequest(), + client.remove_association( + compute.RemoveAssociationRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", - firewall_policy_resource=compute.FirewallPolicy( - associations=[ - compute.FirewallPolicyAssociation( - attachment_target="attachment_target_value" - ) - ] - ), ) -def test_patch_unary_rest_error(): +def test_remove_association_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4802,11 +8178,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchRuleRegionNetworkFirewallPolicyRequest, + compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_patch_rule_unary_rest(request_type): +def test_remove_association_unary_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4818,34 +8194,6 @@ def test_patch_rule_unary_rest(request_type): "region": "sample2", "firewall_policy": "sample3", } - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -4882,36 +8230,14 @@ def test_patch_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_association_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_rule_unary_rest_required_fields( - request_type=compute.PatchRuleRegionNetworkFirewallPolicyRequest, +def test_remove_association_unary_rest_required_fields( + request_type=compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -4930,7 +8256,7 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -4941,11 +8267,11 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_association._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "priority", + "name", "request_id", ) ) @@ -4980,7 +8306,6 @@ def test_patch_rule_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -4989,30 +8314,29 @@ def test_patch_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_association_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_rule_unary_rest_unset_required_fields(): +def test_remove_association_unary_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch_rule._get_unset_required_fields({}) + unset_fields = transport.remove_association._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "priority", + "name", "requestId", ) ) & set( ( "firewallPolicy", - "firewallPolicyRuleResource", "project", "region", ) @@ -5021,7 +8345,7 @@ def test_patch_rule_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_rule_unary_rest_interceptors(null_interceptor): +def test_remove_association_unary_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5034,9 +8358,11 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_patch_rule" + transports.RegionNetworkFirewallPoliciesRestInterceptor, + "post_remove_association", ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_patch_rule" + transports.RegionNetworkFirewallPoliciesRestInterceptor, + "pre_remove_association", ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5053,7 +8379,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRuleRegionNetworkFirewallPolicyRequest() + request = compute.RemoveAssociationRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -5061,7 +8387,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_rule_unary( + client.remove_association_unary( request, metadata=[ ("key", "val"), @@ -5073,9 +8399,9 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_rule_unary_rest_bad_request( +def test_remove_association_unary_rest_bad_request( transport: str = "rest", - request_type=compute.PatchRuleRegionNetworkFirewallPolicyRequest, + request_type=compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5088,34 +8414,6 @@ def test_patch_rule_unary_rest_bad_request( "region": "sample2", "firewall_policy": "sample3", } - request_init["firewall_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "direction": "direction_value", - "disabled": True, - "enable_logging": True, - "kind": "kind_value", - "match": { - "dest_ip_ranges": ["dest_ip_ranges_value_1", "dest_ip_ranges_value_2"], - "layer4_configs": [ - { - "ip_protocol": "ip_protocol_value", - "ports": ["ports_value_1", "ports_value_2"], - } - ], - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"], - "src_secure_tags": [{"name": "name_value", "state": "state_value"}], - }, - "priority": 898, - "rule_name": "rule_name_value", - "rule_tuple_count": 1737, - "target_resources": ["target_resources_value_1", "target_resources_value_2"], - "target_secure_tags": {}, - "target_service_accounts": [ - "target_service_accounts_value_1", - "target_service_accounts_value_2", - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -5127,10 +8425,10 @@ def test_patch_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_rule_unary(request) + client.remove_association_unary(request) -def test_patch_rule_unary_rest_flattened(): +def test_remove_association_unary_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5153,9 +8451,6 @@ def test_patch_rule_unary_rest_flattened(): project="project_value", region="region_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" - ), ) mock_args.update(sample_request) @@ -5167,20 +8462,20 @@ def test_patch_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_rule_unary(**mock_args) + client.remove_association_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/patchRule" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/removeAssociation" % client.transport._host, args[1], ) -def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5189,18 +8484,15 @@ def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_rule_unary( - compute.PatchRuleRegionNetworkFirewallPolicyRequest(), + client.remove_association_unary( + compute.RemoveAssociationRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", - firewall_policy_rule_resource=compute.FirewallPolicyRule( - action="action_value" - ), ) -def test_patch_rule_unary_rest_error(): +def test_remove_association_unary_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5209,11 +8501,11 @@ def test_patch_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, + compute.RemoveRuleRegionNetworkFirewallPolicyRequest, dict, ], ) -def test_remove_association_unary_rest(request_type): +def test_remove_rule_rest(request_type): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5261,10 +8553,10 @@ def test_remove_association_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_association_unary(request) + response = client.remove_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -5289,8 +8581,8 @@ def test_remove_association_unary_rest(request_type): assert response.zone == "zone_value" -def test_remove_association_unary_rest_required_fields( - request_type=compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, +def test_remove_rule_rest_required_fields( + request_type=compute.RemoveRuleRegionNetworkFirewallPolicyRequest, ): transport_class = transports.RegionNetworkFirewallPoliciesRestTransport @@ -5309,7 +8601,7 @@ def test_remove_association_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_association._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -5320,11 +8612,11 @@ def test_remove_association_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_association._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "name", + "priority", "request_id", ) ) @@ -5367,23 +8659,23 @@ def test_remove_association_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_association_unary(request) + response = client.remove_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_association_unary_rest_unset_required_fields(): +def test_remove_rule_rest_unset_required_fields(): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_association._get_unset_required_fields({}) + unset_fields = transport.remove_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "name", + "priority", "requestId", ) ) @@ -5398,7 +8690,7 @@ def test_remove_association_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_association_unary_rest_interceptors(null_interceptor): +def test_remove_rule_rest_interceptors(null_interceptor): transport = transports.RegionNetworkFirewallPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -5411,11 +8703,9 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, - "post_remove_association", + transports.RegionNetworkFirewallPoliciesRestInterceptor, "post_remove_rule" ) as post, mock.patch.object( - transports.RegionNetworkFirewallPoliciesRestInterceptor, - "pre_remove_association", + transports.RegionNetworkFirewallPoliciesRestInterceptor, "pre_remove_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -5432,7 +8722,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveAssociationRegionNetworkFirewallPolicyRequest() + request = compute.RemoveRuleRegionNetworkFirewallPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -5440,7 +8730,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_association_unary( + client.remove_rule( request, metadata=[ ("key", "val"), @@ -5452,9 +8742,9 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_association_unary_rest_bad_request( +def test_remove_rule_rest_bad_request( transport: str = "rest", - request_type=compute.RemoveAssociationRegionNetworkFirewallPolicyRequest, + request_type=compute.RemoveRuleRegionNetworkFirewallPolicyRequest, ): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5478,10 +8768,10 @@ def test_remove_association_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_association_unary(request) + client.remove_rule(request) -def test_remove_association_unary_rest_flattened(): +def test_remove_rule_rest_flattened(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -5515,20 +8805,20 @@ def test_remove_association_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_association_unary(**mock_args) + client.remove_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/removeAssociation" + "%s/compute/v1/projects/{project}/regions/{region}/firewallPolicies/{firewall_policy}/removeRule" % client.transport._host, args[1], ) -def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_rule_rest_flattened_error(transport: str = "rest"): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5537,15 +8827,15 @@ def test_remove_association_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_association_unary( - compute.RemoveAssociationRegionNetworkFirewallPolicyRequest(), + client.remove_rule( + compute.RemoveRuleRegionNetworkFirewallPolicyRequest(), project="project_value", region="region_value", firewall_policy="firewall_policy_value", ) -def test_remove_association_unary_rest_error(): +def test_remove_rule_rest_error(): client = RegionNetworkFirewallPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -5610,28 +8900,6 @@ def test_remove_rule_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_remove_rule_unary_rest_required_fields( @@ -6715,6 +9983,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionNetworkFirewallPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_network_firewall_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -6762,6 +10043,14 @@ def test_region_network_firewall_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_network_firewall_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_notification_endpoints.py b/tests/unit/gapic/compute_v1/test_region_notification_endpoints.py index 559087ee0..b8ad99839 100644 --- a/tests/unit/gapic/compute_v1/test_region_notification_endpoints.py +++ b/tests/unit/gapic/compute_v1/test_region_notification_endpoints.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -563,7 +565,7 @@ def test_region_notification_endpoints_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -611,10 +613,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -639,8 +641,622 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteRegionNotificationEndpointRequest, +def test_delete_rest_required_fields( + request_type=compute.DeleteRegionNotificationEndpointRequest, +): + transport_class = transports.RegionNotificationEndpointsRestTransport + + request_init = {} + request_init["notification_endpoint"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["notificationEndpoint"] = "notification_endpoint_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "notificationEndpoint" in jsonified_request + assert jsonified_request["notificationEndpoint"] == "notification_endpoint_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_rest_unset_required_fields(): + transport = transports.RegionNotificationEndpointsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "notificationEndpoint", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.RegionNotificationEndpointsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNotificationEndpointsRestInterceptor(), + ) + client = RegionNotificationEndpointsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNotificationEndpointsRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionNotificationEndpointsRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRegionNotificationEndpointRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteRegionNotificationEndpointRequest, +): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "notification_endpoint": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "notification_endpoint": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + notification_endpoint="notification_endpoint_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/notificationEndpoints/{notification_endpoint}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteRegionNotificationEndpointRequest(), + project="project_value", + region="region_value", + notification_endpoint="notification_endpoint_value", + ) + + +def test_delete_rest_error(): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionNotificationEndpointRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "notification_endpoint": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionNotificationEndpointRequest, +): + transport_class = transports.RegionNotificationEndpointsRestTransport + + request_init = {} + request_init["notification_endpoint"] = "" + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["notificationEndpoint"] = "notification_endpoint_value" + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "notificationEndpoint" in jsonified_request + assert jsonified_request["notificationEndpoint"] == "notification_endpoint_value" + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.RegionNotificationEndpointsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "notificationEndpoint", + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.RegionNotificationEndpointsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionNotificationEndpointsRestInterceptor(), + ) + client = RegionNotificationEndpointsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionNotificationEndpointsRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionNotificationEndpointsRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRegionNotificationEndpointRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.DeleteRegionNotificationEndpointRequest, +): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "notification_endpoint": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "notification_endpoint": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + notification_endpoint="notification_endpoint_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/notificationEndpoints/{notification_endpoint}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteRegionNotificationEndpointRequest(), + project="project_value", + region="region_value", + notification_endpoint="notification_endpoint_value", + ) + + +def test_delete_unary_rest_error(): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRegionNotificationEndpointRequest, + dict, + ], +) +def test_get_rest(request_type): + client = RegionNotificationEndpointsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "notification_endpoint": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.NotificationEndpoint( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + name="name_value", + region="region_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.NotificationEndpoint.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.NotificationEndpoint) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + + +def test_get_rest_required_fields( + request_type=compute.GetRegionNotificationEndpointRequest, ): transport_class = transports.RegionNotificationEndpointsRestTransport @@ -659,7 +1275,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -670,9 +1286,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -690,7 +1304,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NotificationEndpoint() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -701,32 +1315,32 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NotificationEndpoint.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionNotificationEndpointsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "notificationEndpoint", @@ -738,7 +1352,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionNotificationEndpointsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -751,9 +1365,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNotificationEndpointsRestInterceptor, "post_delete" + transports.RegionNotificationEndpointsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionNotificationEndpointsRestInterceptor, "pre_delete" + transports.RegionNotificationEndpointsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -768,17 +1382,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.NotificationEndpoint.to_json( + compute.NotificationEndpoint() + ) - request = compute.DeleteRegionNotificationEndpointRequest() + request = compute.GetRegionNotificationEndpointRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.NotificationEndpoint - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -790,9 +1406,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.DeleteRegionNotificationEndpointRequest, +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionNotificationEndpointRequest ): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -816,10 +1431,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -828,7 +1443,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.NotificationEndpoint() # get arguments that satisfy an http rule for this method sample_request = { @@ -848,12 +1463,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.NotificationEndpoint.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -866,7 +1481,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -875,15 +1490,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRegionNotificationEndpointRequest(), + client.get( + compute.GetRegionNotificationEndpointRequest(), project="project_value", region="region_value", notification_endpoint="notification_endpoint_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -892,63 +1507,104 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionNotificationEndpointRequest, + compute.InsertRegionNotificationEndpointRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "notification_endpoint": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["notification_endpoint_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_settings": { + "authority": "authority_value", + "endpoint": "endpoint_value", + "payload_name": "payload_name_value", + "resend_interval": {"nanos": 543, "seconds": 751}, + "retry_duration_sec": 1941, + }, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NotificationEndpoint( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NotificationEndpoint.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.NotificationEndpoint) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields( - request_type=compute.GetRegionNotificationEndpointRequest, +def test_insert_rest_required_fields( + request_type=compute.InsertRegionNotificationEndpointRequest, ): transport_class = transports.RegionNotificationEndpointsRestTransport request_init = {} - request_init["notification_endpoint"] = "" request_init["project"] = "" request_init["region"] = "" request = request_type(request_init) @@ -962,23 +1618,22 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["notificationEndpoint"] = "notification_endpoint_value" jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "notificationEndpoint" in jsonified_request - assert jsonified_request["notificationEndpoint"] == "notification_endpoint_value" assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request @@ -991,7 +1646,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.NotificationEndpoint() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1002,35 +1657,36 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.NotificationEndpoint.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RegionNotificationEndpointsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "notificationEndpoint", + "notificationEndpointResource", "project", "region", ) @@ -1039,7 +1695,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RegionNotificationEndpointsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1052,9 +1708,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionNotificationEndpointsRestInterceptor, "post_get" + transports.RegionNotificationEndpointsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.RegionNotificationEndpointsRestInterceptor, "pre_get" + transports.RegionNotificationEndpointsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1069,19 +1725,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.NotificationEndpoint.to_json( - compute.NotificationEndpoint() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionNotificationEndpointRequest() + request = compute.InsertRegionNotificationEndpointRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NotificationEndpoint + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1093,8 +1747,9 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionNotificationEndpointRequest +def test_insert_rest_bad_request( + transport: str = "rest", + request_type=compute.InsertRegionNotificationEndpointRequest, ): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1102,10 +1757,22 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "notification_endpoint": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["notification_endpoint_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "grpc_settings": { + "authority": "authority_value", + "endpoint": "endpoint_value", + "payload_name": "payload_name_value", + "resend_interval": {"nanos": 543, "seconds": 751}, + "retry_duration_sec": 1941, + }, + "id": 205, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", } request = request_type(request_init) @@ -1118,10 +1785,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1130,45 +1797,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.NotificationEndpoint() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "notification_endpoint": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - notification_endpoint="notification_endpoint_value", + notification_endpoint_resource=compute.NotificationEndpoint( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.NotificationEndpoint.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/notificationEndpoints/{notification_endpoint}" + "%s/compute/v1/projects/{project}/regions/{region}/notificationEndpoints" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1177,15 +1842,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionNotificationEndpointRequest(), + client.insert( + compute.InsertRegionNotificationEndpointRequest(), project="project_value", region="region_value", - notification_endpoint="notification_endpoint_value", + notification_endpoint_resource=compute.NotificationEndpoint( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = RegionNotificationEndpointsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1262,28 +1929,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -1970,6 +2615,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionNotificationEndpointsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_notification_endpoints_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2004,6 +2662,14 @@ def test_region_notification_endpoints_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_notification_endpoints_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_operations.py b/tests/unit/gapic/compute_v1/test_region_operations.py index 5f9bc3abe..78bc96765 100644 --- a/tests/unit/gapic/compute_v1/test_region_operations.py +++ b/tests/unit/gapic/compute_v1/test_region_operations.py @@ -1880,6 +1880,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionOperationsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_operations_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1914,6 +1927,14 @@ def test_region_operations_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_operations_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_security_policies.py b/tests/unit/gapic/compute_v1/test_region_security_policies.py index f1d8260eb..b178a2ee4 100644 --- a/tests/unit/gapic/compute_v1/test_region_security_policies.py +++ b/tests/unit/gapic/compute_v1/test_region_security_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -557,7 +559,7 @@ def test_region_security_policies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -605,10 +607,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -633,7 +635,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionSecurityPolicyRequest, ): transport_class = transports.RegionSecurityPoliciesRestTransport @@ -706,14 +708,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -732,7 +734,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -772,7 +774,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -784,7 +786,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionSecurityPolicyRequest ): client = RegionSecurityPoliciesClient( @@ -809,10 +811,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -846,7 +848,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -859,7 +861,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -868,7 +870,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionSecurityPolicyRequest(), project="project_value", region="region_value", @@ -876,7 +878,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -885,11 +887,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionSecurityPolicyRequest, + compute.DeleteRegionSecurityPolicyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -906,40 +908,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - type_="type__value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SecurityPolicy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.type_ == "type__value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionSecurityPolicyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionSecurityPolicyRequest, +): transport_class = transports.RegionSecurityPoliciesRestTransport request_init = {} @@ -957,7 +965,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSecurityPolicyRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -968,7 +976,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSecurityPolicyRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -986,7 +996,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSecurityPolicyRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -997,32 +1007,32 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSecurityPolicyRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1034,7 +1044,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1047,9 +1057,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionSecurityPoliciesRestInterceptor, "post_get" + transports.RegionSecurityPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionSecurityPoliciesRestInterceptor, "pre_get" + transports.RegionSecurityPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1064,19 +1074,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SecurityPolicy.to_json( - compute.SecurityPolicy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionSecurityPolicyRequest() + request = compute.DeleteRegionSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1088,8 +1096,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionSecurityPolicyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionSecurityPolicyRequest ): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1113,10 +1121,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1125,7 +1133,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1145,12 +1153,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1163,7 +1171,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1172,15 +1180,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionSecurityPolicyRequest(), + client.delete_unary( + compute.DeleteRegionSecurityPolicyRequest(), project="project_value", region="region_value", security_policy="security_policy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1189,159 +1197,67 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionSecurityPolicyRequest, + compute.GetRegionSecurityPolicyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["security_policy_resource"] = { - "adaptive_protection_config": { - "layer7_ddos_defense_config": { - "enable": True, - "rule_visibility": "rule_visibility_value", - } - }, - "advanced_options_config": { - "json_parsing": "json_parsing_value", - "log_level": "log_level_value", - }, - "creation_timestamp": "creation_timestamp_value", - "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, - "region": "region_value", - "rules": [ - { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": [ - "src_ip_ranges_value_1", - "src_ip_ranges_value_2", - ] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } - ], - "self_link": "self_link_value", - "type_": "type__value", + request_init = { + "project": "sample1", + "region": "sample2", + "security_policy": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.SecurityPolicy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + type_="type__value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.SecurityPolicy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.type_ == "type__value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionSecurityPolicyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRegionSecurityPolicyRequest): transport_class = transports.RegionSecurityPoliciesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["security_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1353,24 +1269,18 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["securityPolicy"] = "security_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "request_id", - "validate_only", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1378,6 +1288,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1386,7 +1298,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SecurityPolicy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1397,50 +1309,44 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "requestId", - "validateOnly", - ) - ) + set(()) & set( ( "project", "region", - "securityPolicyResource", + "securityPolicy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1453,9 +1359,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionSecurityPoliciesRestInterceptor, "post_insert" + transports.RegionSecurityPoliciesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionSecurityPoliciesRestInterceptor, "pre_insert" + transports.RegionSecurityPoliciesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1470,17 +1376,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.SecurityPolicy.to_json( + compute.SecurityPolicy() + ) - request = compute.InsertRegionSecurityPolicyRequest() + request = compute.GetRegionSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.SecurityPolicy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1492,8 +1400,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionSecurityPolicyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionSecurityPolicyRequest ): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1501,75 +1409,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["security_policy_resource"] = { - "adaptive_protection_config": { - "layer7_ddos_defense_config": { - "enable": True, - "rule_visibility": "rule_visibility_value", - } - }, - "advanced_options_config": { - "json_parsing": "json_parsing_value", - "log_level": "log_level_value", - }, - "creation_timestamp": "creation_timestamp_value", - "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, - "region": "region_value", - "rules": [ - { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": [ - "src_ip_ranges_value_1", - "src_ip_ranges_value_2", - ] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } - ], - "self_link": "self_link_value", - "type_": "type__value", + request_init = { + "project": "sample1", + "region": "sample2", + "security_policy": "sample3", } request = request_type(request_init) @@ -1582,10 +1425,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1594,47 +1437,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SecurityPolicy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "security_policy": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - security_policy_resource=compute.SecurityPolicy( - adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( - layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( - enable=True - ) - ) - ), + security_policy="security_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies" + "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies/{security_policy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1643,21 +1484,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionSecurityPolicyRequest(), + client.get( + compute.GetRegionSecurityPolicyRequest(), project="project_value", region="region_value", - security_policy_resource=compute.SecurityPolicy( - adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( - layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( - enable=True - ) - ) - ), + security_policy="security_policy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1666,11 +1501,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionSecurityPoliciesRequest, + compute.InsertRegionSecurityPolicyRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1678,40 +1513,1432 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionSecurityPolicyRequest, +): + transport_class = transports.RegionSecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "validate_only", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionSecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "validateOnly", + ) + ) + & set( + ( + "project", + "region", + "securityPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionSecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSecurityPoliciesRestInterceptor(), + ) + client = RegionSecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSecurityPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionSecurityPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionSecurityPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionSecurityPolicyRequest +): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionSecurityPolicyRequest(), + project="project_value", + region="region_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + + +def test_insert_rest_error(): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionSecurityPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionSecurityPolicyRequest, +): + transport_class = transports.RegionSecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "request_id", + "validate_only", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionSecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "requestId", + "validateOnly", + ) + ) + & set( + ( + "project", + "region", + "securityPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionSecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSecurityPoliciesRestInterceptor(), + ) + client = RegionSecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSecurityPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionSecurityPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionSecurityPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionSecurityPolicyRequest +): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionSecurityPolicyRequest(), + project="project_value", + region="region_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionSecurityPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPolicyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SecurityPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionSecurityPoliciesRequest, +): + transport_class = transports.RegionSecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPolicyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SecurityPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionSecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionSecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSecurityPoliciesRestInterceptor(), + ) + client = RegionSecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSecurityPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionSecurityPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SecurityPolicyList.to_json( + compute.SecurityPolicyList() + ) + + request = compute.ListRegionSecurityPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SecurityPolicyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionSecurityPoliciesRequest +): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPolicyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SecurityPolicyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionSecurityPoliciesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.SecurityPolicyList( + items=[ + compute.SecurityPolicy(), + compute.SecurityPolicy(), + compute.SecurityPolicy(), + ], + next_page_token="abc", + ), + compute.SecurityPolicyList( + items=[], + next_page_token="def", + ), + compute.SecurityPolicyList( + items=[ + compute.SecurityPolicy(), + ], + next_page_token="ghi", + ), + compute.SecurityPolicyList( + items=[ + compute.SecurityPolicy(), + compute.SecurityPolicy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.SecurityPolicyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.SecurityPolicy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionSecurityPolicyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionSecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "security_policy": "sample3", + } + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListRegionSecurityPoliciesRequest, +def test_patch_rest_required_fields( + request_type=compute.PatchRegionSecurityPolicyRequest, ): transport_class = transports.RegionSecurityPoliciesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["security_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1723,27 +2950,20 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["securityPolicy"] = "security_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1751,6 +2971,8 @@ def test_list_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1759,7 +2981,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1770,51 +2992,46 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "securityPolicy", + "securityPolicyResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.RegionSecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1827,9 +3044,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionSecurityPoliciesRestInterceptor, "post_list" + transports.RegionSecurityPoliciesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionSecurityPoliciesRestInterceptor, "pre_list" + transports.RegionSecurityPoliciesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1844,19 +3061,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SecurityPolicyList.to_json( - compute.SecurityPolicyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionSecurityPoliciesRequest() + request = compute.PatchRegionSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicyList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -1868,8 +3083,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionSecurityPoliciesRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionSecurityPolicyRequest ): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1877,7 +3092,80 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "security_policy": "sample3", + } + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1889,10 +3177,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1901,40 +3189,52 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "security_policy": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + security_policy="security_policy_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies" + "%s/compute/v1/projects/{project}/regions/{region}/securityPolicies/{security_policy}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = RegionSecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1943,73 +3243,26 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionSecurityPoliciesRequest(), + client.patch( + compute.PatchRegionSecurityPolicyRequest(), project="project_value", region="region_value", + security_policy="security_policy_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = RegionSecurityPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.SecurityPolicyList( - items=[ - compute.SecurityPolicy(), - compute.SecurityPolicy(), - compute.SecurityPolicy(), - ], - next_page_token="abc", - ), - compute.SecurityPolicyList( - items=[], - next_page_token="def", - ), - compute.SecurityPolicyList( - items=[ - compute.SecurityPolicy(), - ], - next_page_token="ghi", - ), - compute.SecurityPolicyList( - items=[ - compute.SecurityPolicy(), - compute.SecurityPolicy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.SecurityPolicyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.SecurityPolicy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2139,28 +3392,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2572,6 +3803,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionSecurityPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_security_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2607,6 +3851,14 @@ def test_region_security_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_security_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_ssl_certificates.py b/tests/unit/gapic/compute_v1/test_region_ssl_certificates.py index f7979ec38..ead871f59 100644 --- a/tests/unit/gapic/compute_v1/test_region_ssl_certificates.py +++ b/tests/unit/gapic/compute_v1/test_region_ssl_certificates.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -555,7 +557,7 @@ def test_region_ssl_certificates_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -603,10 +605,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -631,7 +633,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionSslCertificateRequest, ): transport_class = transports.RegionSslCertificatesRestTransport @@ -704,14 +706,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionSslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -730,7 +732,625 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): + transport = transports.RegionSslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslCertificatesRestInterceptor(), + ) + client = RegionSslCertificatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslCertificatesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionSslCertificatesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRegionSslCertificateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionSslCertificateRequest +): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "ssl_certificate": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "ssl_certificate": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ssl_certificate="ssl_certificate_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/sslCertificates/{ssl_certificate}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteRegionSslCertificateRequest(), + project="project_value", + region="region_value", + ssl_certificate="ssl_certificate_value", + ) + + +def test_delete_rest_error(): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionSslCertificateRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "ssl_certificate": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionSslCertificateRequest, +): + transport_class = transports.RegionSslCertificatesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_certificate"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["sslCertificate"] = "ssl_certificate_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "sslCertificate" in jsonified_request + assert jsonified_request["sslCertificate"] == "ssl_certificate_value" + + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.RegionSslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslCertificate", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.RegionSslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslCertificatesRestInterceptor(), + ) + client = RegionSslCertificatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslCertificatesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionSslCertificatesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRegionSslCertificateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionSslCertificateRequest +): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "ssl_certificate": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "ssl_certificate": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ssl_certificate="ssl_certificate_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/sslCertificates/{ssl_certificate}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteRegionSslCertificateRequest(), + project="project_value", + region="region_value", + ssl_certificate="ssl_certificate_value", + ) + + +def test_delete_unary_rest_error(): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRegionSslCertificateRequest, + dict, + ], +) +def test_get_rest(request_type): + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "ssl_certificate": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SslCertificate( + certificate="certificate_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + expire_time="expire_time_value", + id=205, + kind="kind_value", + name="name_value", + private_key="private_key_value", + region="region_value", + self_link="self_link_value", + subject_alternative_names=["subject_alternative_names_value"], + type_="type__value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslCertificate.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.SslCertificate) + assert response.certificate == "certificate_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.expire_time == "expire_time_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.private_key == "private_key_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.subject_alternative_names == ["subject_alternative_names_value"] + assert response.type_ == "type__value" + + +def test_get_rest_required_fields(request_type=compute.GetRegionSslCertificateRequest): + transport_class = transports.RegionSslCertificatesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_certificate"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["sslCertificate"] = "ssl_certificate_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "sslCertificate" in jsonified_request + assert jsonified_request["sslCertificate"] == "ssl_certificate_value" + + client = RegionSslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SslCertificate() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslCertificate.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.RegionSslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "sslCertificate", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionSslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -743,9 +1363,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionSslCertificatesRestInterceptor, "post_delete" + transports.RegionSslCertificatesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionSslCertificatesRestInterceptor, "pre_delete" + transports.RegionSslCertificatesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -760,17 +1380,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.SslCertificate.to_json( + compute.SslCertificate() + ) - request = compute.DeleteRegionSslCertificateRequest() + request = compute.GetRegionSslCertificateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.SslCertificate - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -782,8 +1404,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteRegionSslCertificateRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionSslCertificateRequest ): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -807,10 +1429,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -819,7 +1441,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SslCertificate() # get arguments that satisfy an http rule for this method sample_request = { @@ -839,12 +1461,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SslCertificate.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -857,7 +1479,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -866,15 +1488,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRegionSslCertificateRequest(), + client.get( + compute.GetRegionSslCertificateRequest(), project="project_value", region="region_value", ssl_certificate="ssl_certificate_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -883,73 +1505,116 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionSslCertificateRequest, + compute.InsertRegionSslCertificateRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "ssl_certificate": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["ssl_certificate_resource"] = { + "certificate": "certificate_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "expire_time": "expire_time_value", + "id": 205, + "kind": "kind_value", + "managed": { + "domain_status": {}, + "domains": ["domains_value_1", "domains_value_2"], + "status": "status_value", + }, + "name": "name_value", + "private_key": "private_key_value", + "region": "region_value", + "self_link": "self_link_value", + "self_managed": { + "certificate": "certificate_value", + "private_key": "private_key_value", + }, + "subject_alternative_names": [ + "subject_alternative_names_value_1", + "subject_alternative_names_value_2", + ], + "type_": "type__value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslCertificate( - certificate="certificate_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - expire_time="expire_time_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - private_key="private_key_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - subject_alternative_names=["subject_alternative_names_value"], - type_="type__value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslCertificate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SslCertificate) - assert response.certificate == "certificate_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.expire_time == "expire_time_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.private_key == "private_key_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.subject_alternative_names == ["subject_alternative_names_value"] - assert response.type_ == "type__value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetRegionSslCertificateRequest): +def test_insert_rest_required_fields( + request_type=compute.InsertRegionSslCertificateRequest, +): transport_class = transports.RegionSslCertificatesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["ssl_certificate"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -961,18 +1626,19 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSslCertificateRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["sslCertificate"] = "ssl_certificate_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -980,8 +1646,6 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSslCertificateRe assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "sslCertificate" in jsonified_request - assert jsonified_request["sslCertificate"] == "ssl_certificate_value" client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -990,7 +1654,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSslCertificateRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SslCertificate() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1001,44 +1665,45 @@ def test_get_rest_required_fields(request_type=compute.GetRegionSslCertificateRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslCertificate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RegionSslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "region", - "sslCertificate", + "sslCertificateResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RegionSslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1051,9 +1716,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionSslCertificatesRestInterceptor, "post_get" + transports.RegionSslCertificatesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.RegionSslCertificatesRestInterceptor, "pre_get" + transports.RegionSslCertificatesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1068,19 +1733,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SslCertificate.to_json( - compute.SslCertificate() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionSslCertificateRequest() + request = compute.InsertRegionSslCertificateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificate + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1092,8 +1755,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionSslCertificateRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionSslCertificateRequest ): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1101,10 +1764,32 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "ssl_certificate": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["ssl_certificate_resource"] = { + "certificate": "certificate_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "expire_time": "expire_time_value", + "id": 205, + "kind": "kind_value", + "managed": { + "domain_status": {}, + "domains": ["domains_value_1", "domains_value_2"], + "status": "status_value", + }, + "name": "name_value", + "private_key": "private_key_value", + "region": "region_value", + "self_link": "self_link_value", + "self_managed": { + "certificate": "certificate_value", + "private_key": "private_key_value", + }, + "subject_alternative_names": [ + "subject_alternative_names_value_1", + "subject_alternative_names_value_2", + ], + "type_": "type__value", } request = request_type(request_init) @@ -1117,10 +1802,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1129,45 +1814,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslCertificate() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "ssl_certificate": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - ssl_certificate="ssl_certificate_value", + ssl_certificate_resource=compute.SslCertificate( + certificate="certificate_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslCertificate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/sslCertificates/{ssl_certificate}" + "%s/compute/v1/projects/{project}/regions/{region}/sslCertificates" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1176,15 +1859,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionSslCertificateRequest(), + client.insert( + compute.InsertRegionSslCertificateRequest(), project="project_value", region="region_value", - ssl_certificate="ssl_certificate_value", + ssl_certificate_resource=compute.SslCertificate( + certificate="certificate_value" + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = RegionSslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1271,28 +1956,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -1988,6 +2651,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionSslCertificatesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_ssl_certificates_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2022,6 +2698,14 @@ def test_region_ssl_certificates_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_ssl_certificates_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_target_http_proxies.py b/tests/unit/gapic/compute_v1/test_region_target_http_proxies.py index 208163351..1bee6493e 100644 --- a/tests/unit/gapic/compute_v1/test_region_target_http_proxies.py +++ b/tests/unit/gapic/compute_v1/test_region_target_http_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -557,7 +559,7 @@ def test_region_target_http_proxies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -605,10 +607,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -633,7 +635,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionTargetHttpProxyRequest, ): transport_class = transports.RegionTargetHttpProxiesRestTransport @@ -706,14 +708,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -732,7 +734,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -772,7 +774,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -784,7 +786,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionTargetHttpProxyRequest ): client = RegionTargetHttpProxiesClient( @@ -809,10 +811,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -846,7 +848,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -859,7 +861,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -868,7 +870,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionTargetHttpProxyRequest(), project="project_value", region="region_value", @@ -876,7 +878,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -885,11 +887,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionTargetHttpProxyRequest, + compute.DeleteRegionTargetHttpProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -906,42 +908,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - proxy_bind=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - url_map="url_map_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetHttpProxy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.proxy_bind is True - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.url_map == "url_map_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionTargetHttpProxyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionTargetHttpProxyRequest, +): transport_class = transports.RegionTargetHttpProxiesRestTransport request_init = {} @@ -959,7 +965,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionTargetHttpProxyR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -970,7 +976,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionTargetHttpProxyR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -988,7 +996,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionTargetHttpProxyR request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -999,32 +1007,32 @@ def test_get_rest_required_fields(request_type=compute.GetRegionTargetHttpProxyR # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1036,7 +1044,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1049,9 +1057,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpProxiesRestInterceptor, "post_get" + transports.RegionTargetHttpProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionTargetHttpProxiesRestInterceptor, "pre_get" + transports.RegionTargetHttpProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1066,19 +1074,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpProxy.to_json( - compute.TargetHttpProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionTargetHttpProxyRequest() + request = compute.DeleteRegionTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1090,8 +1096,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionTargetHttpProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionTargetHttpProxyRequest ): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1115,10 +1121,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1127,7 +1133,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1147,12 +1153,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1165,7 +1171,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1174,15 +1180,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionTargetHttpProxyRequest(), + client.delete_unary( + compute.DeleteRegionTargetHttpProxyRequest(), project="project_value", region="region_value", target_http_proxy="target_http_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1191,102 +1197,69 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionTargetHttpProxyRequest, + compute.GetRegionTargetHttpProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["target_http_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "region": "region_value", - "self_link": "self_link_value", - "url_map": "url_map_value", + request_init = { + "project": "sample1", + "region": "sample2", + "target_http_proxy": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetHttpProxy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + proxy_bind=True, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + url_map="url_map_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetHttpProxy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.proxy_bind is True assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.url_map == "url_map_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionTargetHttpProxyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRegionTargetHttpProxyRequest): transport_class = transports.RegionTargetHttpProxiesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["target_http_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1298,19 +1271,18 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["targetHttpProxy"] = "target_http_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1318,6 +1290,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "targetHttpProxy" in jsonified_request + assert jsonified_request["targetHttpProxy"] == "target_http_proxy_value" client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1326,7 +1300,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1337,45 +1311,44 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", "region", - "targetHttpProxyResource", + "targetHttpProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1388,9 +1361,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpProxiesRestInterceptor, "post_insert" + transports.RegionTargetHttpProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionTargetHttpProxiesRestInterceptor, "pre_insert" + transports.RegionTargetHttpProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1405,17 +1378,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetHttpProxy.to_json( + compute.TargetHttpProxy() + ) - request = compute.InsertRegionTargetHttpProxyRequest() + request = compute.GetRegionTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetHttpProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1427,8 +1402,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionTargetHttpProxyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionTargetHttpProxyRequest ): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1436,18 +1411,10 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["target_http_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "region": "region_value", - "self_link": "self_link_value", - "url_map": "url_map_value", + request_init = { + "project": "sample1", + "region": "sample2", + "target_http_proxy": "sample3", } request = request_type(request_init) @@ -1460,10 +1427,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1472,30 +1439,996 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpProxy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} - + sample_request = { + "project": "sample1", + "region": "sample2", + "target_http_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_http_proxy="target_http_proxy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpProxies/{target_http_proxy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetRegionTargetHttpProxyRequest(), + project="project_value", + region="region_value", + target_http_proxy="target_http_proxy_value", + ) + + +def test_get_rest_error(): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionTargetHttpProxyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertRegionTargetHttpProxyRequest, +): + transport_class = transports.RegionTargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionTargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetHttpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpProxiesRestInterceptor(), + ) + client = RegionTargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionTargetHttpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionTargetHttpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionTargetHttpProxyRequest +): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionTargetHttpProxyRequest(), + project="project_value", + region="region_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionTargetHttpProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionTargetHttpProxyRequest, +): + transport_class = transports.RegionTargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionTargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetHttpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpProxiesRestInterceptor(), + ) + client = RegionTargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionTargetHttpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionTargetHttpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionTargetHttpProxyRequest +): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionTargetHttpProxyRequest(), + project="project_value", + region="region_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionTargetHttpProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionTargetHttpProxiesRequest, +): + transport_class = transports.RegionTargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionTargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpProxiesRestInterceptor(), + ) + client = RegionTargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionTargetHttpProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetHttpProxyList.to_json( + compute.TargetHttpProxyList() + ) + + request = compute.ListRegionTargetHttpProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetHttpProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionTargetHttpProxiesRequest +): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - target_http_proxy_resource=compute.TargetHttpProxy( - creation_timestamp="creation_timestamp_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpProxyList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1508,7 +2441,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1517,73 +2450,167 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionTargetHttpProxyRequest(), + client.list( + compute.ListRegionTargetHttpProxiesRequest(), project="project_value", region="region_value", - target_http_proxy_resource=compute.TargetHttpProxy( - creation_timestamp="creation_timestamp_value" + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionTargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetHttpProxyList( + items=[ + compute.TargetHttpProxy(), + compute.TargetHttpProxy(), + compute.TargetHttpProxy(), + ], + next_page_token="abc", + ), + compute.TargetHttpProxyList( + items=[], + next_page_token="def", + ), + compute.TargetHttpProxyList( + items=[ + compute.TargetHttpProxy(), + ], + next_page_token="ghi", + ), + compute.TargetHttpProxyList( + items=[ + compute.TargetHttpProxy(), + compute.TargetHttpProxy(), + ], ), ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetHttpProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + pager = client.list(request=sample_request) -def test_insert_unary_rest_error(): - client = RegionTargetHttpProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetHttpProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - compute.ListRegionTargetHttpProxiesRequest, + compute.SetUrlMapRegionTargetHttpProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_set_url_map_rest(request_type): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "target_http_proxy": "sample3", + } + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_url_map(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListRegionTargetHttpProxiesRequest, +def test_set_url_map_rest_required_fields( + request_type=compute.SetUrlMapRegionTargetHttpProxyRequest, ): transport_class = transports.RegionTargetHttpProxiesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["target_http_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1595,27 +2622,20 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["targetHttpProxy"] = "target_http_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1623,6 +2643,8 @@ def test_list_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "targetHttpProxy" in jsonified_request + assert jsonified_request["targetHttpProxy"] == "target_http_proxy_value" client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1631,7 +2653,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1642,51 +2664,46 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_url_map(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_url_map_rest_unset_required_fields(): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_url_map._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "targetHttpProxy", + "urlMapReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_url_map_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1699,9 +2716,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpProxiesRestInterceptor, "post_list" + transports.RegionTargetHttpProxiesRestInterceptor, "post_set_url_map" ) as post, mock.patch.object( - transports.RegionTargetHttpProxiesRestInterceptor, "pre_list" + transports.RegionTargetHttpProxiesRestInterceptor, "pre_set_url_map" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1716,19 +2733,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpProxyList.to_json( - compute.TargetHttpProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionTargetHttpProxiesRequest() + request = compute.SetUrlMapRegionTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxyList + post.return_value = compute.Operation - client.list( + client.set_url_map( request, metadata=[ ("key", "val"), @@ -1740,8 +2755,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionTargetHttpProxiesRequest +def test_set_url_map_rest_bad_request( + transport: str = "rest", request_type=compute.SetUrlMapRegionTargetHttpProxyRequest ): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1749,7 +2764,12 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "target_http_proxy": "sample3", + } + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1761,10 +2781,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_url_map(request) -def test_list_rest_flattened(): +def test_set_url_map_rest_flattened(): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1773,40 +2793,46 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "target_http_proxy": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + target_http_proxy="target_http_proxy_value", + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_url_map(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetHttpProxies" + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpProxies/{target_http_proxy}/setUrlMap" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_url_map_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1815,73 +2841,20 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionTargetHttpProxiesRequest(), + client.set_url_map( + compute.SetUrlMapRegionTargetHttpProxyRequest(), project="project_value", region="region_value", + target_http_proxy="target_http_proxy_value", + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_url_map_rest_error(): client = RegionTargetHttpProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetHttpProxyList( - items=[ - compute.TargetHttpProxy(), - compute.TargetHttpProxy(), - compute.TargetHttpProxy(), - ], - next_page_token="abc", - ), - compute.TargetHttpProxyList( - items=[], - next_page_token="def", - ), - compute.TargetHttpProxyList( - items=[ - compute.TargetHttpProxy(), - ], - next_page_token="ghi", - ), - compute.TargetHttpProxyList( - items=[ - compute.TargetHttpProxy(), - compute.TargetHttpProxy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.TargetHttpProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetHttpProxy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -1943,28 +2916,6 @@ def test_set_url_map_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_url_map_unary_rest_required_fields( @@ -2296,6 +3247,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionTargetHttpProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_target_http_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2331,6 +3295,14 @@ def test_region_target_http_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_target_http_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_target_https_proxies.py b/tests/unit/gapic/compute_v1/test_region_target_https_proxies.py index c9992c1f3..99b081ee7 100644 --- a/tests/unit/gapic/compute_v1/test_region_target_https_proxies.py +++ b/tests/unit/gapic/compute_v1/test_region_target_https_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -561,7 +563,7 @@ def test_region_target_https_proxies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -609,10 +611,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -637,7 +639,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteRegionTargetHttpsProxyRequest, ): transport_class = transports.RegionTargetHttpsProxiesRestTransport @@ -710,14 +712,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -736,7 +738,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -776,7 +778,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -788,7 +790,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionTargetHttpsProxyRequest ): client = RegionTargetHttpsProxiesClient( @@ -813,10 +815,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -850,7 +852,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -863,7 +865,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -872,7 +874,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionTargetHttpsProxyRequest(), project="project_value", region="region_value", @@ -880,7 +882,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -889,11 +891,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionTargetHttpsProxyRequest, + compute.DeleteRegionTargetHttpsProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -910,53 +912,45 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - proxy_bind=True, - quic_override="quic_override_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - server_tls_policy="server_tls_policy_value", - ssl_certificates=["ssl_certificates_value"], - ssl_policy="ssl_policy_value", - url_map="url_map_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetHttpsProxy) - assert response.authorization_policy == "authorization_policy_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.proxy_bind is True - assert response.quic_override == "quic_override_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.server_tls_policy == "server_tls_policy_value" - assert response.ssl_certificates == ["ssl_certificates_value"] - assert response.ssl_policy == "ssl_policy_value" - assert response.url_map == "url_map_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields( - request_type=compute.GetRegionTargetHttpsProxyRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionTargetHttpsProxyRequest, ): transport_class = transports.RegionTargetHttpsProxiesRestTransport @@ -975,7 +969,7 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -986,7 +980,9 @@ def test_get_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1004,7 +1000,7 @@ def test_get_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1015,32 +1011,32 @@ def test_get_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1052,7 +1048,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1065,9 +1061,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "post_get" + transports.RegionTargetHttpsProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "pre_get" + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1082,19 +1078,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpsProxy.to_json( - compute.TargetHttpsProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionTargetHttpsProxyRequest() + request = compute.DeleteRegionTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1106,8 +1100,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionTargetHttpsProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionTargetHttpsProxyRequest ): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1131,10 +1125,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1143,7 +1137,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1163,12 +1157,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1181,7 +1175,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1190,15 +1184,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionTargetHttpsProxyRequest(), + client.delete_unary( + compute.DeleteRegionTargetHttpsProxyRequest(), project="project_value", region="region_value", target_https_proxy="target_https_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1207,107 +1201,81 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionTargetHttpsProxyRequest, + compute.GetRegionTargetHttpsProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value", creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + proxy_bind=True, + quic_override="quic_override_value", region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + server_tls_policy="server_tls_policy_value", + ssl_certificates=["ssl_certificates_value"], + ssl_policy="ssl_policy_value", + url_map="url_map_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpsProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetHttpsProxy) + assert response.authorization_policy == "authorization_policy_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.proxy_bind is True + assert response.quic_override == "quic_override_value" assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.server_tls_policy == "server_tls_policy_value" + assert response.ssl_certificates == ["ssl_certificates_value"] + assert response.ssl_policy == "ssl_policy_value" + assert response.url_map == "url_map_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionTargetHttpsProxyRequest, +def test_get_rest_required_fields( + request_type=compute.GetRegionTargetHttpsProxyRequest, ): transport_class = transports.RegionTargetHttpsProxiesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["target_https_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1319,19 +1287,18 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1339,6 +1306,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1347,7 +1316,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpsProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1358,45 +1327,44 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpsProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", "region", - "targetHttpsProxyResource", + "targetHttpsProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1409,9 +1377,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "post_insert" + transports.RegionTargetHttpsProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "pre_insert" + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1426,17 +1394,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetHttpsProxy.to_json( + compute.TargetHttpsProxy() + ) - request = compute.InsertRegionTargetHttpsProxyRequest() + request = compute.GetRegionTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetHttpsProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1448,32 +1418,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionTargetHttpsProxyRequest -): +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionTargetHttpsProxyRequest +): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", } request = request_type(request_init) @@ -1486,10 +1443,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1498,43 +1455,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpsProxy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" - ), + target_https_proxy="target_https_proxy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpsProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies" + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1543,17 +1502,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionTargetHttpsProxyRequest(), + client.get( + compute.GetRegionTargetHttpsProxyRequest(), project="project_value", region="region_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" - ), + target_https_proxy="target_https_proxy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1562,11 +1519,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionTargetHttpsProxiesRequest, + compute.InsertRegionTargetHttpsProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1574,36 +1531,89 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields( - request_type=compute.ListRegionTargetHttpsProxiesRequest, +def test_insert_rest_required_fields( + request_type=compute.InsertRegionTargetHttpsProxyRequest, ): transport_class = transports.RegionTargetHttpsProxiesRestTransport @@ -1621,7 +1631,7 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1631,17 +1641,9 @@ def test_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1657,7 +1659,7 @@ def test_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1668,51 +1670,45 @@ def test_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "targetHttpsProxyResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1725,9 +1721,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "post_list" + transports.RegionTargetHttpsProxiesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "pre_list" + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1742,19 +1738,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpsProxyList.to_json( - compute.TargetHttpsProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionTargetHttpsProxiesRequest() + request = compute.InsertRegionTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxyList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -1766,8 +1760,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionTargetHttpsProxiesRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionTargetHttpsProxyRequest ): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1776,6 +1770,23 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1787,10 +1798,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1799,7 +1810,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -1808,18 +1819,21 @@ def test_list_rest_flattened(): mock_args = dict( project="project_value", region="region_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1832,7 +1846,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1841,21 +1855,652 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionTargetHttpsProxiesRequest(), + client.insert( + compute.InsertRegionTargetHttpsProxyRequest(), project="project_value", region="region_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionTargetHttpsProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + transport="rest", ) + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionTargetHttpsProxyRequest, +): + transport_class = transports.RegionTargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpsProxiesRestInterceptor(), + ) + client = RegionTargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionTargetHttpsProxyRequest +): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionTargetHttpsProxyRequest(), + project="project_value", + region="region_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionTargetHttpsProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields( + request_type=compute.ListRegionTargetHttpsProxiesRequest, +): + transport_class = transports.RegionTargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpsProxiesRestInterceptor(), + ) + client = RegionTargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetHttpsProxyList.to_json( + compute.TargetHttpsProxyList() + ) + + request = compute.ListRegionTargetHttpsProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetHttpsProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionTargetHttpsProxiesRequest +): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionTargetHttpsProxiesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: # TODO(kbandes): remove this mock unless there's a good reason for it. # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages @@ -1868,55 +2513,1128 @@ def test_list_rest_pager(transport: str = "rest"): ], next_page_token="abc", ), - compute.TargetHttpsProxyList( - items=[], - next_page_token="def", + compute.TargetHttpsProxyList( + items=[], + next_page_token="def", + ), + compute.TargetHttpsProxyList( + items=[ + compute.TargetHttpsProxy(), + ], + next_page_token="ghi", + ), + compute.TargetHttpsProxyList( + items=[ + compute.TargetHttpsProxy(), + compute.TargetHttpsProxy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetHttpsProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetHttpsProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionTargetHttpsProxyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields( + request_type=compute.PatchRegionTargetHttpsProxyRequest, +): + transport_class = transports.RegionTargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetHttpsProxy", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpsProxiesRestInterceptor(), + ) + client = RegionTargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionTargetHttpsProxyRequest +): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchRegionTargetHttpsProxyRequest(), + project="project_value", + region="region_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + + +def test_patch_rest_error(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionTargetHttpsProxyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionTargetHttpsProxyRequest, +): + transport_class = transports.RegionTargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetHttpsProxy", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpsProxiesRestInterceptor(), + ) + client = RegionTargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionTargetHttpsProxyRequest +): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" ), - compute.TargetHttpsProxyList( - items=[ - compute.TargetHttpsProxy(), - ], - next_page_token="ghi", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchRegionTargetHttpsProxyRequest(), + project="project_value", + region="region_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" ), - compute.TargetHttpsProxyList( - items=[ - compute.TargetHttpsProxy(), - compute.TargetHttpsProxy(), - ], + ) + + +def test_patch_unary_rest_error(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetSslCertificatesRegionTargetHttpsProxyRequest, + dict, + ], +) +def test_set_ssl_certificates_rest(request_type): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + request_init[ + "region_target_https_proxies_set_ssl_certificates_request_resource" + ] = {"ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"]} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_ssl_certificates(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_ssl_certificates_rest_required_fields( + request_type=compute.SetSslCertificatesRegionTargetHttpsProxyRequest, +): + transport_class = transports.RegionTargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_ssl_certificates(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_ssl_certificates_rest_unset_required_fields(): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "regionTargetHttpsProxiesSetSslCertificatesRequestResource", + "targetHttpsProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_ssl_certificates_rest_interceptors(null_interceptor): + transport = transports.RegionTargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetHttpsProxiesRestInterceptor(), + ) + client = RegionTargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "post_set_ssl_certificates" + ) as post, mock.patch.object( + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_set_ssl_certificates" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetSslCertificatesRegionTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_ssl_certificates( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_ssl_certificates_rest_bad_request( + transport: str = "rest", + request_type=compute.SetSslCertificatesRegionTargetHttpsProxyRequest, +): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + request_init[ + "region_target_https_proxies_set_ssl_certificates_request_resource" + ] = {"ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"]} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_ssl_certificates(request) + + +def test_set_ssl_certificates_rest_flattened(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_https_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_https_proxy="target_https_proxy_value", + region_target_https_proxies_set_ssl_certificates_request_resource=compute.RegionTargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) - # Two responses for two calls - response = response + response + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_ssl_certificates(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}/setSslCertificates" + % client.transport._host, + args[1], + ) - # Wrap the values into proper Response objs - response = tuple(compute.TargetHttpsProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - sample_request = {"project": "sample1", "region": "sample2"} +def test_set_ssl_certificates_rest_flattened_error(transport: str = "rest"): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) - pager = client.list(request=sample_request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_ssl_certificates( + compute.SetSslCertificatesRegionTargetHttpsProxyRequest(), + project="project_value", + region="region_value", + target_https_proxy="target_https_proxy_value", + region_target_https_proxies_set_ssl_certificates_request_resource=compute.RegionTargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] + ), + ) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetHttpsProxy) for i in results) - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token +def test_set_ssl_certificates_rest_error(): + client = RegionTargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionTargetHttpsProxyRequest, + compute.SetSslCertificatesRegionTargetHttpsProxyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_set_ssl_certificates_unary_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1928,23 +3646,9 @@ def test_patch_unary_rest(request_type): "region": "sample2", "target_https_proxy": "sample3", } - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", - } + request_init[ + "region_target_https_proxies_set_ssl_certificates_request_resource" + ] = {"ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1981,36 +3685,14 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_ssl_certificates_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionTargetHttpsProxyRequest, +def test_set_ssl_certificates_unary_rest_required_fields( + request_type=compute.SetSslCertificatesRegionTargetHttpsProxyRequest, ): transport_class = transports.RegionTargetHttpsProxiesRestTransport @@ -2029,7 +3711,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2040,7 +3722,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2071,7 +3753,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2083,34 +3765,34 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_ssl_certificates_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_ssl_certificates_unary_rest_unset_required_fields(): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", "region", + "regionTargetHttpsProxiesSetSslCertificatesRequestResource", "targetHttpsProxy", - "targetHttpsProxyResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2123,9 +3805,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "post_patch" + transports.RegionTargetHttpsProxiesRestInterceptor, "post_set_ssl_certificates" ) as post, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "pre_patch" + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_set_ssl_certificates" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2142,7 +3824,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRegionTargetHttpsProxyRequest() + request = compute.SetSslCertificatesRegionTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2150,7 +3832,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.set_ssl_certificates_unary( request, metadata=[ ("key", "val"), @@ -2162,8 +3844,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRegionTargetHttpsProxyRequest +def test_set_ssl_certificates_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetSslCertificatesRegionTargetHttpsProxyRequest, ): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2176,23 +3859,9 @@ def test_patch_unary_rest_bad_request( "region": "sample2", "target_https_proxy": "sample3", } - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", - } + request_init[ + "region_target_https_proxies_set_ssl_certificates_request_resource" + ] = {"ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"]} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2204,10 +3873,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_ssl_certificates_unary(request) -def test_patch_unary_rest_flattened(): +def test_set_ssl_certificates_unary_rest_flattened(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2230,8 +3899,8 @@ def test_patch_unary_rest_flattened(): project="project_value", region="region_value", target_https_proxy="target_https_proxy_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" + region_target_https_proxies_set_ssl_certificates_request_resource=compute.RegionTargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) mock_args.update(sample_request) @@ -2244,20 +3913,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_ssl_certificates_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}" + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}/setSslCertificates" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2266,18 +3935,18 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionTargetHttpsProxyRequest(), + client.set_ssl_certificates_unary( + compute.SetSslCertificatesRegionTargetHttpsProxyRequest(), project="project_value", region="region_value", target_https_proxy="target_https_proxy_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" + region_target_https_proxies_set_ssl_certificates_request_resource=compute.RegionTargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) -def test_patch_unary_rest_error(): +def test_set_ssl_certificates_unary_rest_error(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2286,11 +3955,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetSslCertificatesRegionTargetHttpsProxyRequest, + compute.SetUrlMapRegionTargetHttpsProxyRequest, dict, ], ) -def test_set_ssl_certificates_unary_rest(request_type): +def test_set_url_map_rest(request_type): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2302,9 +3971,7 @@ def test_set_ssl_certificates_unary_rest(request_type): "region": "sample2", "target_https_proxy": "sample3", } - request_init[ - "region_target_https_proxies_set_ssl_certificates_request_resource" - ] = {"ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"]} + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2341,10 +4008,10 @@ def test_set_ssl_certificates_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_certificates_unary(request) + response = client.set_url_map(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2369,8 +4036,8 @@ def test_set_ssl_certificates_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_ssl_certificates_unary_rest_required_fields( - request_type=compute.SetSslCertificatesRegionTargetHttpsProxyRequest, +def test_set_url_map_rest_required_fields( + request_type=compute.SetUrlMapRegionTargetHttpsProxyRequest, ): transport_class = transports.RegionTargetHttpsProxiesRestTransport @@ -2389,7 +4056,7 @@ def test_set_ssl_certificates_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2400,7 +4067,7 @@ def test_set_ssl_certificates_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2443,34 +4110,34 @@ def test_set_ssl_certificates_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_certificates_unary(request) + response = client.set_url_map(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_ssl_certificates_unary_rest_unset_required_fields(): +def test_set_url_map_rest_unset_required_fields(): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) + unset_fields = transport.set_url_map._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", "region", - "regionTargetHttpsProxiesSetSslCertificatesRequestResource", "targetHttpsProxy", + "urlMapReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): +def test_set_url_map_rest_interceptors(null_interceptor): transport = transports.RegionTargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2483,9 +4150,9 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "post_set_ssl_certificates" + transports.RegionTargetHttpsProxiesRestInterceptor, "post_set_url_map" ) as post, mock.patch.object( - transports.RegionTargetHttpsProxiesRestInterceptor, "pre_set_ssl_certificates" + transports.RegionTargetHttpsProxiesRestInterceptor, "pre_set_url_map" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2502,7 +4169,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetSslCertificatesRegionTargetHttpsProxyRequest() + request = compute.SetUrlMapRegionTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2510,7 +4177,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_ssl_certificates_unary( + client.set_url_map( request, metadata=[ ("key", "val"), @@ -2522,9 +4189,8 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_ssl_certificates_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetSslCertificatesRegionTargetHttpsProxyRequest, +def test_set_url_map_rest_bad_request( + transport: str = "rest", request_type=compute.SetUrlMapRegionTargetHttpsProxyRequest ): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2537,9 +4203,7 @@ def test_set_ssl_certificates_unary_rest_bad_request( "region": "sample2", "target_https_proxy": "sample3", } - request_init[ - "region_target_https_proxies_set_ssl_certificates_request_resource" - ] = {"ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"]} + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2551,10 +4215,10 @@ def test_set_ssl_certificates_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_ssl_certificates_unary(request) + client.set_url_map(request) -def test_set_ssl_certificates_unary_rest_flattened(): +def test_set_url_map_rest_flattened(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2577,9 +4241,7 @@ def test_set_ssl_certificates_unary_rest_flattened(): project="project_value", region="region_value", target_https_proxy="target_https_proxy_value", - region_target_https_proxies_set_ssl_certificates_request_resource=compute.RegionTargetHttpsProxiesSetSslCertificatesRequest( - ssl_certificates=["ssl_certificates_value"] - ), + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) mock_args.update(sample_request) @@ -2591,20 +4253,20 @@ def test_set_ssl_certificates_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_ssl_certificates_unary(**mock_args) + client.set_url_map(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}/setSslCertificates" + "%s/compute/v1/projects/{project}/regions/{region}/targetHttpsProxies/{target_https_proxy}/setUrlMap" % client.transport._host, args[1], ) -def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest"): +def test_set_url_map_rest_flattened_error(transport: str = "rest"): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2613,18 +4275,16 @@ def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_ssl_certificates_unary( - compute.SetSslCertificatesRegionTargetHttpsProxyRequest(), + client.set_url_map( + compute.SetUrlMapRegionTargetHttpsProxyRequest(), project="project_value", region="region_value", target_https_proxy="target_https_proxy_value", - region_target_https_proxies_set_ssl_certificates_request_resource=compute.RegionTargetHttpsProxiesSetSslCertificatesRequest( - ssl_certificates=["ssl_certificates_value"] - ), + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) -def test_set_ssl_certificates_unary_rest_error(): +def test_set_url_map_rest_error(): client = RegionTargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2690,28 +4350,6 @@ def test_set_url_map_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_url_map_unary_rest_required_fields( @@ -3043,6 +4681,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionTargetHttpsProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_target_https_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3080,6 +4731,14 @@ def test_region_target_https_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_target_https_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_region_url_maps.py b/tests/unit/gapic/compute_v1/test_region_url_maps.py index 1430c7b56..c8dd00594 100644 --- a/tests/unit/gapic/compute_v1/test_region_url_maps.py +++ b/tests/unit/gapic/compute_v1/test_region_url_maps.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -525,7 +527,7 @@ def test_region_url_maps_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -569,10 +571,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -597,9 +599,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteRegionUrlMapRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteRegionUrlMapRequest): transport_class = transports.RegionUrlMapsRestTransport request_init = {} @@ -670,14 +670,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -696,7 +696,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -736,7 +736,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -748,7 +748,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRegionUrlMapRequest ): client = RegionUrlMapsClient( @@ -769,10 +769,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -806,7 +806,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -819,7 +819,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -828,7 +828,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRegionUrlMapRequest(), project="project_value", region="region_value", @@ -836,7 +836,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -845,11 +845,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRegionUrlMapRequest, + compute.DeleteRegionUrlMapRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -862,40 +862,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMap( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_service="default_service_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMap.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.UrlMap) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_service == "default_service_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRegionUrlMapRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteRegionUrlMapRequest, +): transport_class = transports.RegionUrlMapsRestTransport request_init = {} @@ -913,7 +919,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionUrlMapRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -924,7 +930,9 @@ def test_get_rest_required_fields(request_type=compute.GetRegionUrlMapRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -942,7 +950,7 @@ def test_get_rest_required_fields(request_type=compute.GetRegionUrlMapRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.UrlMap() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -953,32 +961,32 @@ def test_get_rest_required_fields(request_type=compute.GetRegionUrlMapRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMap.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -990,7 +998,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1003,9 +1011,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "post_get" + transports.RegionUrlMapsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "pre_get" + transports.RegionUrlMapsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1020,17 +1028,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.UrlMap.to_json(compute.UrlMap()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRegionUrlMapRequest() + request = compute.DeleteRegionUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMap + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1042,8 +1050,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRegionUrlMapRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRegionUrlMapRequest ): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1063,10 +1071,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1075,7 +1083,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMap() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1095,12 +1103,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMap.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1113,7 +1121,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1122,15 +1130,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRegionUrlMapRequest(), + client.delete_unary( + compute.DeleteRegionUrlMapRequest(), project="project_value", region="region_value", url_map="url_map_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1139,259 +1147,63 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertRegionUrlMapRequest, + compute.GetRegionUrlMapRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["url_map_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "default_route_action": { - "cors_policy": { - "allow_credentials": True, - "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], - "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], - "allow_origin_regexes": [ - "allow_origin_regexes_value_1", - "allow_origin_regexes_value_2", - ], - "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], - "disabled": True, - "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], - "max_age": 722, - }, - "fault_injection_policy": { - "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, - "delay": { - "fixed_delay": {"nanos": 543, "seconds": 751}, - "percentage": 0.10540000000000001, - }, - }, - "max_stream_duration": {}, - "request_mirror_policy": {"backend_service": "backend_service_value"}, - "retry_policy": { - "num_retries": 1197, - "per_try_timeout": {}, - "retry_conditions": [ - "retry_conditions_value_1", - "retry_conditions_value_2", - ], - }, - "timeout": {}, - "url_rewrite": { - "host_rewrite": "host_rewrite_value", - "path_prefix_rewrite": "path_prefix_rewrite_value", - }, - "weighted_backend_services": [ - { - "backend_service": "backend_service_value", - "header_action": { - "request_headers_to_add": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - "replace": True, - } - ], - "request_headers_to_remove": [ - "request_headers_to_remove_value_1", - "request_headers_to_remove_value_2", - ], - "response_headers_to_add": {}, - "response_headers_to_remove": [ - "response_headers_to_remove_value_1", - "response_headers_to_remove_value_2", - ], - }, - "weight": 648, - } - ], - }, - "default_service": "default_service_value", - "default_url_redirect": { - "host_redirect": "host_redirect_value", - "https_redirect": True, - "path_redirect": "path_redirect_value", - "prefix_redirect": "prefix_redirect_value", - "redirect_response_code": "redirect_response_code_value", - "strip_query": True, - }, - "description": "description_value", - "fingerprint": "fingerprint_value", - "header_action": {}, - "host_rules": [ - { - "description": "description_value", - "hosts": ["hosts_value_1", "hosts_value_2"], - "path_matcher": "path_matcher_value", - } - ], - "id": 205, - "kind": "kind_value", - "name": "name_value", - "path_matchers": [ - { - "default_route_action": {}, - "default_service": "default_service_value", - "default_url_redirect": {}, - "description": "description_value", - "header_action": {}, - "name": "name_value", - "path_rules": [ - { - "paths": ["paths_value_1", "paths_value_2"], - "route_action": {}, - "service": "service_value", - "url_redirect": {}, - } - ], - "route_rules": [ - { - "description": "description_value", - "header_action": {}, - "match_rules": [ - { - "full_path_match": "full_path_match_value", - "header_matches": [ - { - "exact_match": "exact_match_value", - "header_name": "header_name_value", - "invert_match": True, - "prefix_match": "prefix_match_value", - "present_match": True, - "range_match": { - "range_end": 931, - "range_start": 1178, - }, - "regex_match": "regex_match_value", - "suffix_match": "suffix_match_value", - } - ], - "ignore_case": True, - "metadata_filters": [ - { - "filter_labels": [ - { - "name": "name_value", - "value": "value_value", - } - ], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "prefix_match": "prefix_match_value", - "query_parameter_matches": [ - { - "exact_match": "exact_match_value", - "name": "name_value", - "present_match": True, - "regex_match": "regex_match_value", - } - ], - "regex_match": "regex_match_value", - } - ], - "priority": 898, - "route_action": {}, - "service": "service_value", - "url_redirect": {}, - } - ], - } - ], - "region": "region_value", - "self_link": "self_link_value", - "tests": [ - { - "description": "description_value", - "expected_output_url": "expected_output_url_value", - "expected_redirect_response_code": 3275, - "headers": [{"name": "name_value", "value": "value_value"}], - "host": "host_value", - "path": "path_value", - "service": "service_value", - } - ], - } + request_init = {"project": "sample1", "region": "sample2", "url_map": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.UrlMap( creation_timestamp="creation_timestamp_value", + default_service="default_service_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.UrlMap.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.UrlMap) assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_service == "default_service_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertRegionUrlMapRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRegionUrlMapRequest): transport_class = transports.RegionUrlMapsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["url_map"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1403,19 +1215,18 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["urlMap"] = "url_map_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1423,6 +1234,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1431,7 +1244,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.UrlMap() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1442,45 +1255,44 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.UrlMap.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", "region", - "urlMapResource", + "urlMap", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1493,9 +1305,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "post_insert" + transports.RegionUrlMapsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "pre_insert" + transports.RegionUrlMapsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1510,17 +1322,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.UrlMap.to_json(compute.UrlMap()) - request = compute.InsertRegionUrlMapRequest() + request = compute.GetRegionUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.UrlMap - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1532,14 +1344,113 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRegionUrlMapRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRegionUrlMapRequest ): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "url_map": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UrlMap() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "url_map": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + url_map="url_map_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMap.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/urlMaps/{url_map}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetRegionUrlMapRequest(), + project="project_value", + region="region_value", + url_map="url_map_value", + ) + + +def test_get_rest_error(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionUrlMapRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} request_init["url_map_resource"] = { @@ -1713,42 +1624,2081 @@ def test_insert_unary_rest_bad_request( } request = request_type(request_init) - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.insert_unary(request) - - -def test_insert_unary_rest_flattened(): - client = RegionUrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() - - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} - - # get truthy value for each flattened field - mock_args = dict( - project="project_value", - region="region_value", - url_map_resource=compute.UrlMap( - creation_timestamp="creation_timestamp_value" - ), - ) - mock_args.update(sample_request) - + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertRegionUrlMapRequest): + transport_class = transports.RegionUrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "urlMapResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionUrlMapsRestInterceptor(), + ) + client = RegionUrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionUrlMapRequest +): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/urlMaps" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRegionUrlMapRequest(), + project="project_value", + region="region_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionUrlMapRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertRegionUrlMapRequest, +): + transport_class = transports.RegionUrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "urlMapResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionUrlMapsRestInterceptor(), + ) + client = RegionUrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRegionUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRegionUrlMapRequest +): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/urlMaps" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRegionUrlMapRequest(), + project="project_value", + region="region_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionUrlMapsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UrlMapList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMapList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListRegionUrlMapsRequest): + transport_class = transports.RegionUrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.UrlMapList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMapList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionUrlMapsRestInterceptor(), + ) + client = RegionUrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.UrlMapList.to_json(compute.UrlMapList()) + + request = compute.ListRegionUrlMapsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.UrlMapList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRegionUrlMapsRequest +): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UrlMapList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMapList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/urlMaps" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRegionUrlMapsRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.UrlMapList( + items=[ + compute.UrlMap(), + compute.UrlMap(), + compute.UrlMap(), + ], + next_page_token="abc", + ), + compute.UrlMapList( + items=[], + next_page_token="def", + ), + compute.UrlMapList( + items=[ + compute.UrlMap(), + ], + next_page_token="ghi", + ), + compute.UrlMapList( + items=[ + compute.UrlMap(), + compute.UrlMap(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.UrlMapList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.UrlMap) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionUrlMapRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "url_map": "sample3"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchRegionUrlMapRequest): + transport_class = transports.RegionUrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["url_map"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["urlMap"] = "url_map_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" + + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "urlMap", + "urlMapResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionUrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionUrlMapsRestInterceptor(), + ) + client = RegionUrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionUrlMapsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRegionUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionUrlMapRequest +): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "url_map": "sample3"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = RegionUrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "url_map": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 @@ -1757,20 +3707,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/urlMaps" + "%s/compute/v1/projects/{project}/regions/{region}/urlMaps/{url_map}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1779,17 +3729,18 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRegionUrlMapRequest(), + client.patch( + compute.PatchRegionUrlMapRequest(), project="project_value", region="region_value", + url_map="url_map_value", url_map_resource=compute.UrlMap( creation_timestamp="creation_timestamp_value" ), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1798,52 +3749,238 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRegionUrlMapsRequest, + compute.PatchRegionUrlMapRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "url_map": "sample3"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMapList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMapList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListRegionUrlMapsRequest): +def test_patch_unary_rest_required_fields( + request_type=compute.PatchRegionUrlMapRequest, +): transport_class = transports.RegionUrlMapsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["url_map"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1855,27 +3992,20 @@ def test_list_rest_required_fields(request_type=compute.ListRegionUrlMapsRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["urlMap"] = "url_map_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1883,6 +4013,8 @@ def test_list_rest_required_fields(request_type=compute.ListRegionUrlMapsRequest assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1891,7 +4023,7 @@ def test_list_rest_required_fields(request_type=compute.ListRegionUrlMapsRequest request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.UrlMapList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1902,51 +4034,46 @@ def test_list_rest_required_fields(request_type=compute.ListRegionUrlMapsRequest # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMapList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "urlMap", + "urlMapResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1959,9 +4086,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "post_list" + transports.RegionUrlMapsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "pre_list" + transports.RegionUrlMapsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1976,17 +4103,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.UrlMapList.to_json(compute.UrlMapList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRegionUrlMapsRequest() + request = compute.PatchRegionUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMapList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -1998,8 +4125,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRegionUrlMapsRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRegionUrlMapRequest ): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2007,7 +4134,176 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "url_map": "sample3"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2019,10 +4315,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2031,40 +4327,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMapList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "url_map": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMapList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/urlMaps" + "%s/compute/v1/projects/{project}/regions/{region}/urlMaps/{url_map}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2073,82 +4377,31 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRegionUrlMapsRequest(), + client.patch_unary( + compute.PatchRegionUrlMapRequest(), project="project_value", region="region_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = RegionUrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.UrlMapList( - items=[ - compute.UrlMap(), - compute.UrlMap(), - compute.UrlMap(), - ], - next_page_token="abc", - ), - compute.UrlMapList( - items=[], - next_page_token="def", - ), - compute.UrlMapList( - items=[ - compute.UrlMap(), - ], - next_page_token="ghi", - ), - compute.UrlMapList( - items=[ - compute.UrlMap(), - compute.UrlMap(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.UrlMapList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.UrlMap) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRegionUrlMapRequest, + compute.UpdateRegionUrlMapRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2361,10 +4614,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2389,9 +4642,7 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchRegionUrlMapRequest, -): +def test_update_rest_required_fields(request_type=compute.UpdateRegionUrlMapRequest): transport_class = transports.RegionUrlMapsRestTransport request_init = {} @@ -2409,7 +4660,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2420,7 +4671,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2451,7 +4702,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -2463,19 +4714,19 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -2490,7 +4741,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.RegionUrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2503,9 +4754,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "post_patch" + transports.RegionUrlMapsRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.RegionUrlMapsRestInterceptor, "pre_patch" + transports.RegionUrlMapsRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2522,7 +4773,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRegionUrlMapRequest() + request = compute.UpdateRegionUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2530,7 +4781,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -2542,8 +4793,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRegionUrlMapRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateRegionUrlMapRequest ): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2732,10 +4983,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2772,7 +5023,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2785,7 +5036,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2794,8 +5045,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRegionUrlMapRequest(), + client.update( + compute.UpdateRegionUrlMapRequest(), project="project_value", region="region_value", url_map="url_map_value", @@ -2805,7 +5056,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = RegionUrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3035,28 +5286,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -4191,6 +6420,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionUrlMapsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_region_url_maps_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4228,6 +6470,14 @@ def test_region_url_maps_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_region_url_maps_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_regions.py b/tests/unit/gapic/compute_v1/test_regions.py index 51f16cc21..b0fc203d4 100644 --- a/tests/unit/gapic/compute_v1/test_regions.py +++ b/tests/unit/gapic/compute_v1/test_regions.py @@ -1189,6 +1189,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_regions_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1221,6 +1234,14 @@ def test_regions_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_regions_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_reservations.py b/tests/unit/gapic/compute_v1/test_reservations.py index 807216676..fb53bcc37 100644 --- a/tests/unit/gapic/compute_v1/test_reservations.py +++ b/tests/unit/gapic/compute_v1/test_reservations.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -871,7 +873,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -915,10 +917,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -943,9 +945,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteReservationRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteReservationRequest): transport_class = transports.ReservationsRestTransport request_init = {} @@ -1016,14 +1016,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1042,7 +1042,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1082,7 +1082,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1094,7 +1094,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteReservationRequest ): client = ReservationsClient( @@ -1115,10 +1115,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1152,7 +1152,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1165,7 +1165,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1174,7 +1174,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteReservationRequest(), project="project_value", zone="zone_value", @@ -1182,7 +1182,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1191,11 +1191,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetReservationRequest, + compute.DeleteReservationRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1208,44 +1208,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Reservation( - commitment="commitment_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - satisfies_pzs=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - specific_reservation_required=True, - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Reservation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Reservation) - assert response.commitment == "commitment_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.specific_reservation_required is True - assert response.status == "status_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetReservationRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteReservationRequest, +): transport_class = transports.ReservationsRestTransport request_init = {} @@ -1263,7 +1265,7 @@ def test_get_rest_required_fields(request_type=compute.GetReservationRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1274,7 +1276,9 @@ def test_get_rest_required_fields(request_type=compute.GetReservationRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1292,7 +1296,7 @@ def test_get_rest_required_fields(request_type=compute.GetReservationRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Reservation() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1303,32 +1307,32 @@ def test_get_rest_required_fields(request_type=compute.GetReservationRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Reservation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1340,7 +1344,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1353,9 +1357,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_get" + transports.ReservationsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_get" + transports.ReservationsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1370,17 +1374,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Reservation.to_json(compute.Reservation()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetReservationRequest() + request = compute.DeleteReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Reservation + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1392,8 +1396,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetReservationRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1413,10 +1417,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1425,7 +1429,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Reservation() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1445,12 +1449,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Reservation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1463,7 +1467,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1472,15 +1476,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetReservationRequest(), + client.delete_unary( + compute.DeleteReservationRequest(), project="project_value", zone="zone_value", reservation="reservation_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1489,52 +1493,66 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyReservationRequest, + compute.GetReservationRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Reservation( + commitment="commitment_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + name="name_value", + satisfies_pzs=True, + self_link="self_link_value", + specific_reservation_required=True, + status="status_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Reservation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.Reservation) + assert response.commitment == "commitment_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.satisfies_pzs is True + assert response.self_link == "self_link_value" + assert response.specific_reservation_required is True + assert response.status == "status_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyReservationRequest, -): +def test_get_rest_required_fields(request_type=compute.GetReservationRequest): transport_class = transports.ReservationsRestTransport request_init = {} request_init["project"] = "" - request_init["resource"] = "" + request_init["reservation"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1547,27 +1565,25 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" + jsonified_request["reservation"] = "reservation_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "reservation" in jsonified_request + assert jsonified_request["reservation"] == "reservation_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -1578,7 +1594,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Reservation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1596,29 +1612,29 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Reservation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(()) & set( ( "project", - "resource", + "reservation", "zone", ) ) @@ -1626,7 +1642,7 @@ def test_get_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1639,9 +1655,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_get_iam_policy" + transports.ReservationsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_get_iam_policy" + transports.ReservationsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1656,17 +1672,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Reservation.to_json(compute.Reservation()) - request = compute.GetIamPolicyReservationRequest() + request = compute.GetReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Reservation - client.get_iam_policy( + client.get( request, metadata=[ ("key", "val"), @@ -1678,8 +1694,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyReservationRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1687,7 +1703,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1699,10 +1715,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.get(request) -def test_get_iam_policy_rest_flattened(): +def test_get_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1711,45 +1727,45 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Reservation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "reservation": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", + reservation="reservation_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Reservation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1758,15 +1774,15 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyReservationRequest(), + client.get( + compute.GetReservationRequest(), project="project_value", zone="zone_value", - resource="resource_value", + reservation="reservation_value", ) -def test_get_iam_policy_rest_error(): +def test_get_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1775,120 +1791,52 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertReservationRequest, + compute.GetIamPolicyReservationRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_iam_policy_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["reservation_resource"] = { - "commitment": "commitment_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "share_settings": {"project_map": {}, "share_type": "share_type_value"}, - "specific_reservation": { - "assured_count": 1407, - "count": 553, - "in_use_count": 1291, - "instance_properties": { - "guest_accelerators": [ - { - "accelerator_count": 1805, - "accelerator_type": "accelerator_type_value", - } - ], - "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], - "location_hint": "location_hint_value", - "machine_type": "machine_type_value", - "min_cpu_platform": "min_cpu_platform_value", - }, - }, - "specific_reservation_required": True, - "status": "status_value", - "zone": "zone_value", - } + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_insert_unary_rest_required_fields( - request_type=compute.InsertReservationRequest, +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyReservationRequest, ): transport_class = transports.ReservationsRestTransport request_init = {} request_init["project"] = "" + request_init["resource"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1901,24 +1849,27 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -1929,7 +1880,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1940,37 +1891,36 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("optionsRequestedPolicyVersion",)) & set( ( "project", - "reservationResource", + "resource", "zone", ) ) @@ -1978,7 +1928,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1991,9 +1941,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_insert" + transports.ReservationsRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_insert" + transports.ReservationsRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2008,17 +1958,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.InsertReservationRequest() + request = compute.GetIamPolicyReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Policy - client.insert_unary( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -2030,8 +1980,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertReservationRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2039,38 +1989,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2"} - request_init["reservation_resource"] = { - "commitment": "commitment_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "share_settings": {"project_map": {}, "share_type": "share_type_value"}, - "specific_reservation": { - "assured_count": 1407, - "count": 553, - "in_use_count": 1291, - "instance_properties": { - "guest_accelerators": [ - { - "accelerator_count": 1805, - "accelerator_type": "accelerator_type_value", - } - ], - "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], - "location_hint": "location_hint_value", - "machine_type": "machine_type_value", - "min_cpu_platform": "min_cpu_platform_value", - }, - }, - "specific_reservation_required": True, - "status": "status_value", - "zone": "zone_value", - } + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2082,10 +2001,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get_iam_policy(request) -def test_insert_unary_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2094,41 +2013,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "zone": "sample2"} + sample_request = { + "project": "sample1", + "zone": "sample2", + "resource": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - reservation_resource=compute.Reservation(commitment="commitment_value"), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/reservations" + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2137,15 +2060,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertReservationRequest(), + client.get_iam_policy( + compute.GetIamPolicyReservationRequest(), project="project_value", zone="zone_value", - reservation_resource=compute.Reservation(commitment="commitment_value"), + resource="resource_value", ) -def test_insert_unary_rest_error(): +def test_get_iam_policy_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2154,11 +2077,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListReservationsRequest, + compute.InsertReservationRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2166,35 +2089,102 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2"} + request_init["reservation_resource"] = { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ReservationList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ReservationList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListReservationsRequest): +def test_insert_rest_required_fields(request_type=compute.InsertReservationRequest): transport_class = transports.ReservationsRestTransport request_init = {} @@ -2211,7 +2201,7 @@ def test_list_rest_required_fields(request_type=compute.ListReservationsRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2221,17 +2211,9 @@ def test_list_rest_required_fields(request_type=compute.ListReservationsRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2247,7 +2229,7 @@ def test_list_rest_required_fields(request_type=compute.ListReservationsRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ReservationList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2258,43 +2240,37 @@ def test_list_rest_required_fields(request_type=compute.ListReservationsRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ReservationList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", + "reservationResource", "zone", ) ) @@ -2302,7 +2278,7 @@ def test_list_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2315,9 +2291,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_list" + transports.ReservationsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_list" + transports.ReservationsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2332,19 +2308,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ReservationList.to_json( - compute.ReservationList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListReservationsRequest() + request = compute.InsertReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ReservationList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -2356,8 +2330,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListReservationsRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2366,6 +2340,37 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2"} + request_init["reservation_resource"] = { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2377,10 +2382,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2389,7 +2394,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ReservationList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "zone": "sample2"} @@ -2398,18 +2403,19 @@ def test_list_rest_flattened(): mock_args = dict( project="project_value", zone="zone_value", + reservation_resource=compute.Reservation(commitment="commitment_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ReservationList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2422,7 +2428,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2431,90 +2437,66 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListReservationsRequest(), + client.insert( + compute.InsertReservationRequest(), project="project_value", zone="zone_value", + reservation_resource=compute.Reservation(commitment="commitment_value"), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): client = ReservationsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ReservationList( - items=[ - compute.Reservation(), - compute.Reservation(), - compute.Reservation(), - ], - next_page_token="abc", - ), - compute.ReservationList( - items=[], - next_page_token="def", - ), - compute.ReservationList( - items=[ - compute.Reservation(), - ], - next_page_token="ghi", - ), - compute.ReservationList( - items=[ - compute.Reservation(), - compute.Reservation(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ReservationList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "zone": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Reservation) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ResizeReservationRequest, + compute.InsertReservationRequest, dict, ], ) -def test_resize_unary_rest(request_type): +def test_insert_unary_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} - request_init["reservations_resize_request_resource"] = {"specific_sku_count": 1920} + request_init = {"project": "sample1", "zone": "sample2"} + request_init["reservation_resource"] = { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2551,42 +2533,19 @@ def test_resize_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.insert_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_resize_unary_rest_required_fields( - request_type=compute.ResizeReservationRequest, +def test_insert_unary_rest_required_fields( + request_type=compute.InsertReservationRequest, ): transport_class = transports.ReservationsRestTransport request_init = {} request_init["project"] = "" - request_init["reservation"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -2599,18 +2558,17 @@ def test_resize_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["reservation"] = "reservation_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).resize._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2618,8 +2576,6 @@ def test_resize_unary_rest_required_fields( # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "reservation" in jsonified_request - assert jsonified_request["reservation"] == "reservation_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -2653,34 +2609,1415 @@ def test_resize_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.resize_unary(request) + response = client.insert_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_resize_unary_rest_unset_required_fields(): +def test_insert_unary_rest_unset_required_fields(): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "reservationResource", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ReservationsRestInterceptor(), + ) + client = ReservationsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ReservationsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ReservationsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertReservationRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertReservationRequest +): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request_init["reservation_resource"] = { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + reservation_resource=compute.Reservation(commitment="commitment_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/reservations" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertReservationRequest(), + project="project_value", + zone="zone_value", + reservation_resource=compute.Reservation(commitment="commitment_value"), + ) + + +def test_insert_unary_rest_error(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListReservationsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ReservationList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ReservationList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListReservationsRequest): + transport_class = transports.ReservationsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ReservationList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ReservationList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ReservationsRestInterceptor(), + ) + client = ReservationsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ReservationsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.ReservationsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ReservationList.to_json( + compute.ReservationList() + ) + + request = compute.ListReservationsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ReservationList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListReservationsRequest +): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ReservationList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "zone": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ReservationList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/reservations" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListReservationsRequest(), + project="project_value", + zone="zone_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ReservationList( + items=[ + compute.Reservation(), + compute.Reservation(), + compute.Reservation(), + ], + next_page_token="abc", + ), + compute.ReservationList( + items=[], + next_page_token="def", + ), + compute.ReservationList( + items=[ + compute.Reservation(), + ], + next_page_token="ghi", + ), + compute.ReservationList( + items=[ + compute.Reservation(), + compute.Reservation(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ReservationList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "zone": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Reservation) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeReservationRequest, + dict, + ], +) +def test_resize_rest(request_type): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} + request_init["reservations_resize_request_resource"] = {"specific_sku_count": 1920} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_resize_rest_required_fields(request_type=compute.ResizeReservationRequest): + transport_class = transports.ReservationsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["reservation"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["reservation"] = "reservation_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "reservation" in jsonified_request + assert jsonified_request["reservation"] == "reservation_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_rest_unset_required_fields(): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.resize._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "reservation", + "reservationsResizeRequestResource", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_rest_interceptors(null_interceptor): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ReservationsRestInterceptor(), + ) + client = ReservationsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ReservationsRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.ReservationsRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeReservationRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeReservationRequest +): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} + request_init["reservations_resize_request_resource"] = {"specific_sku_count": 1920} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize(request) + + +def test_resize_rest_flattened(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "reservation": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + reservation="reservation_value", + reservations_resize_request_resource=compute.ReservationsResizeRequest( + specific_sku_count=1920 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_rest_flattened_error(transport: str = "rest"): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize( + compute.ResizeReservationRequest(), + project="project_value", + zone="zone_value", + reservation="reservation_value", + reservations_resize_request_resource=compute.ReservationsResizeRequest( + specific_sku_count=1920 + ), + ) + + +def test_resize_rest_error(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ResizeReservationRequest, + dict, + ], +) +def test_resize_unary_rest(request_type): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} + request_init["reservations_resize_request_resource"] = {"specific_sku_count": 1920} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.resize_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_resize_unary_rest_required_fields( + request_type=compute.ResizeReservationRequest, +): + transport_class = transports.ReservationsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["reservation"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["reservation"] = "reservation_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).resize._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "reservation" in jsonified_request + assert jsonified_request["reservation"] == "reservation_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.resize_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_resize_unary_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) unset_fields = transport.resize._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("requestId",)) + & set( + ( + "project", + "reservation", + "reservationsResizeRequestResource", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_resize_unary_rest_interceptors(null_interceptor): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ReservationsRestInterceptor(), + ) + client = ReservationsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ReservationsRestInterceptor, "post_resize" + ) as post, mock.patch.object( + transports.ReservationsRestInterceptor, "pre_resize" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.ResizeReservationRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.resize_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_resize_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ResizeReservationRequest +): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} + request_init["reservations_resize_request_resource"] = {"specific_sku_count": 1920} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.resize_unary(request) + + +def test_resize_unary_rest_flattened(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "reservation": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + reservation="reservation_value", + reservations_resize_request_resource=compute.ReservationsResizeRequest( + specific_sku_count=1920 + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.resize_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}/resize" + % client.transport._host, + args[1], + ) + + +def test_resize_unary_rest_flattened_error(transport: str = "rest"): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.resize_unary( + compute.ResizeReservationRequest(), + project="project_value", + zone="zone_value", + reservation="reservation_value", + reservations_resize_request_resource=compute.ReservationsResizeRequest( + specific_sku_count=1920 + ), + ) + + +def test_resize_unary_rest_error(): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyReservationRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicyReservationRequest, +): + transport_class = transports.ReservationsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = ReservationsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.ReservationsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) & set( ( "project", - "reservation", - "reservationsResizeRequestResource", + "resource", "zone", + "zoneSetPolicyRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_resize_unary_rest_interceptors(null_interceptor): +def test_set_iam_policy_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2693,9 +4030,9 @@ def test_resize_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_resize" + transports.ReservationsRestInterceptor, "post_set_iam_policy" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_resize" + transports.ReservationsRestInterceptor, "pre_set_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2710,17 +4047,17 @@ def test_resize_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.ResizeReservationRequest() + request = compute.SetIamPolicyReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Policy - client.resize_unary( + client.set_iam_policy( request, metadata=[ ("key", "val"), @@ -2732,8 +4069,8 @@ def test_resize_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_resize_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ResizeReservationRequest +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicyReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2741,8 +4078,84 @@ def test_resize_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} - request_init["reservations_resize_request_resource"] = {"specific_sku_count": 1920} + request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} + request_init["zone_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2754,10 +4167,10 @@ def test_resize_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.resize_unary(request) + client.set_iam_policy(request) -def test_resize_unary_rest_flattened(): +def test_set_iam_policy_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2766,22 +4179,22 @@ def test_resize_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "reservation": "sample3", + "resource": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - reservation="reservation_value", - reservations_resize_request_resource=compute.ReservationsResizeRequest( - specific_sku_count=1920 + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] ), ) mock_args.update(sample_request) @@ -2789,25 +4202,25 @@ def test_resize_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.resize_unary(**mock_args) + client.set_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}/resize" + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/setIamPolicy" % client.transport._host, args[1], ) -def test_resize_unary_rest_flattened_error(transport: str = "rest"): +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2816,18 +4229,18 @@ def test_resize_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.resize_unary( - compute.ResizeReservationRequest(), + client.set_iam_policy( + compute.SetIamPolicyReservationRequest(), project="project_value", zone="zone_value", - reservation="reservation_value", - reservations_resize_request_resource=compute.ReservationsResizeRequest( - specific_sku_count=1920 + resource="resource_value", + zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] ), ) -def test_resize_unary_rest_error(): +def test_set_iam_policy_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2836,11 +4249,11 @@ def test_resize_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicyReservationRequest, + compute.TestIamPermissionsReservationRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_test_iam_permissions_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2848,111 +4261,33 @@ def test_set_iam_policy_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init["test_permissions_request_resource"] = { + "permissions": ["permissions_value_1", "permissions_value_2"] } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.TestPermissionsResponse( + permissions=["permissions_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.TestPermissionsResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.test_iam_permissions(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.TestPermissionsResponse) + assert response.permissions == ["permissions_value"] -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicyReservationRequest, +def test_test_iam_permissions_rest_required_fields( + request_type=compute.TestIamPermissionsReservationRequest, ): transport_class = transports.ReservationsRestTransport @@ -2971,7 +4306,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2982,7 +4317,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3000,7 +4335,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.TestPermissionsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3019,38 +4354,38 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.TestPermissionsResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.test_iam_permissions(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_test_iam_permissions_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( "project", "resource", + "testPermissionsRequestResource", "zone", - "zoneSetPolicyRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_test_iam_permissions_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3063,9 +4398,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_set_iam_policy" + transports.ReservationsRestInterceptor, "post_test_iam_permissions" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_set_iam_policy" + transports.ReservationsRestInterceptor, "pre_test_iam_permissions" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3080,17 +4415,19 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.TestPermissionsResponse.to_json( + compute.TestPermissionsResponse() + ) - request = compute.SetIamPolicyReservationRequest() + request = compute.TestIamPermissionsReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.TestPermissionsResponse - client.set_iam_policy( + client.test_iam_permissions( request, metadata=[ ("key", "val"), @@ -3102,8 +4439,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicyReservationRequest +def test_test_iam_permissions_rest_bad_request( + transport: str = "rest", request_type=compute.TestIamPermissionsReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3112,82 +4449,8 @@ def test_set_iam_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["zone_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init["test_permissions_request_resource"] = { + "permissions": ["permissions_value_1", "permissions_value_2"] } request = request_type(request_init) @@ -3200,10 +4463,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.test_iam_permissions(request) -def test_set_iam_policy_rest_flattened(): +def test_test_iam_permissions_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3212,7 +4475,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.TestPermissionsResponse() # get arguments that satisfy an http rule for this method sample_request = { @@ -3226,8 +4489,8 @@ def test_set_iam_policy_rest_flattened(): project="project_value", zone="zone_value", resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + test_permissions_request_resource=compute.TestPermissionsRequest( + permissions=["permissions_value"] ), ) mock_args.update(sample_request) @@ -3235,25 +4498,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.TestPermissionsResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.test_iam_permissions(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/testIamPermissions" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3262,18 +4525,18 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicyReservationRequest(), + client.test_iam_permissions( + compute.TestIamPermissionsReservationRequest(), project="project_value", zone="zone_value", resource="resource_value", - zone_set_policy_request_resource=compute.ZoneSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + test_permissions_request_resource=compute.TestPermissionsRequest( + permissions=["permissions_value"] ), ) -def test_set_iam_policy_rest_error(): +def test_test_iam_permissions_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3282,51 +4545,119 @@ def test_set_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.TestIamPermissionsReservationRequest, + compute.UpdateReservationRequest, dict, ], ) -def test_test_iam_permissions_rest(request_type): +def test_update_rest(request_type): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["test_permissions_request_resource"] = { - "permissions": ["permissions_value_1", "permissions_value_2"] + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} + request_init["reservation_resource"] = { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TestPermissionsResponse( - permissions=["permissions_value"], + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TestPermissionsResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TestPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_test_iam_permissions_rest_required_fields( - request_type=compute.TestIamPermissionsReservationRequest, -): +def test_update_rest_required_fields(request_type=compute.UpdateReservationRequest): transport_class = transports.ReservationsRestTransport request_init = {} request_init["project"] = "" - request_init["resource"] = "" + request_init["reservation"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -3339,25 +4670,33 @@ def test_test_iam_permissions_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" + jsonified_request["reservation"] = "reservation_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "paths", + "request_id", + "update_mask", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "reservation" in jsonified_request + assert jsonified_request["reservation"] == "reservation_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -3368,7 +4707,7 @@ def test_test_iam_permissions_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TestPermissionsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3379,7 +4718,7 @@ def test_test_iam_permissions_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -3387,30 +4726,36 @@ def test_test_iam_permissions_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.TestPermissionsResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_test_iam_permissions_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "paths", + "requestId", + "updateMask", + ) + ) & set( ( "project", - "resource", - "testPermissionsRequestResource", + "reservation", + "reservationResource", "zone", ) ) @@ -3418,7 +4763,7 @@ def test_test_iam_permissions_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.ReservationsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3431,9 +4776,9 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ReservationsRestInterceptor, "post_test_iam_permissions" + transports.ReservationsRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.ReservationsRestInterceptor, "pre_test_iam_permissions" + transports.ReservationsRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3448,19 +4793,17 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TestPermissionsResponse.to_json( - compute.TestPermissionsResponse() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.TestIamPermissionsReservationRequest() + request = compute.UpdateReservationRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.Operation - client.test_iam_permissions( + client.update( request, metadata=[ ("key", "val"), @@ -3472,8 +4815,8 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): post.assert_called_once() -def test_test_iam_permissions_rest_bad_request( - transport: str = "rest", request_type=compute.TestIamPermissionsReservationRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateReservationRequest ): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3481,9 +4824,37 @@ def test_test_iam_permissions_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "zone": "sample2", "resource": "sample3"} - request_init["test_permissions_request_resource"] = { - "permissions": ["permissions_value_1", "permissions_value_2"] + request_init = {"project": "sample1", "zone": "sample2", "reservation": "sample3"} + request_init["reservation_resource"] = { + "commitment": "commitment_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, + "specific_reservation": { + "assured_count": 1407, + "count": 553, + "in_use_count": 1291, + "instance_properties": { + "guest_accelerators": [ + { + "accelerator_count": 1805, + "accelerator_type": "accelerator_type_value", + } + ], + "local_ssds": [{"disk_size_gb": 1261, "interface": "interface_value"}], + "location_hint": "location_hint_value", + "machine_type": "machine_type_value", + "min_cpu_platform": "min_cpu_platform_value", + }, + }, + "specific_reservation_required": True, + "status": "status_value", + "zone": "zone_value", } request = request_type(request_init) @@ -3496,10 +4867,10 @@ def test_test_iam_permissions_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.test_iam_permissions(request) + client.update(request) -def test_test_iam_permissions_rest_flattened(): +def test_update_rest_flattened(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3508,48 +4879,46 @@ def test_test_iam_permissions_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TestPermissionsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "zone": "sample2", - "resource": "sample3", + "reservation": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - resource="resource_value", - test_permissions_request_resource=compute.TestPermissionsRequest( - permissions=["permissions_value"] - ), + reservation="reservation_value", + reservation_resource=compute.Reservation(commitment="commitment_value"), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TestPermissionsResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.test_iam_permissions(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{resource}/testIamPermissions" + "%s/compute/v1/projects/{project}/zones/{zone}/reservations/{reservation}" % client.transport._host, args[1], ) -def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3558,18 +4927,16 @@ def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.test_iam_permissions( - compute.TestIamPermissionsReservationRequest(), + client.update( + compute.UpdateReservationRequest(), project="project_value", zone="zone_value", - resource="resource_value", - test_permissions_request_resource=compute.TestPermissionsRequest( - permissions=["permissions_value"] - ), + reservation="reservation_value", + reservation_resource=compute.Reservation(commitment="commitment_value"), ) -def test_test_iam_permissions_rest_error(): +def test_update_rest_error(): client = ReservationsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3661,28 +5028,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields( @@ -4052,6 +5397,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ReservationsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_reservations_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4092,6 +5450,14 @@ def test_reservations_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_reservations_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_resource_policies.py b/tests/unit/gapic/compute_v1/test_resource_policies.py index 111ac5e09..7078cadbb 100644 --- a/tests/unit/gapic/compute_v1/test_resource_policies.py +++ b/tests/unit/gapic/compute_v1/test_resource_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -906,7 +908,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -954,10 +956,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -982,9 +984,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteResourcePolicyRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteResourcePolicyRequest): transport_class = transports.ResourcePoliciesRestTransport request_init = {} @@ -1055,14 +1055,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.ResourcePoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1081,7 +1081,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.ResourcePoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1121,7 +1121,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1133,7 +1133,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteResourcePolicyRequest ): client = ResourcePoliciesClient( @@ -1158,10 +1158,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1195,7 +1195,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1208,7 +1208,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1217,7 +1217,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteResourcePolicyRequest(), project="project_value", region="region_value", @@ -1225,7 +1225,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1234,11 +1234,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetResourcePolicyRequest, + compute.DeleteResourcePolicyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1255,38 +1255,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ResourcePolicy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ResourcePolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.ResourcePolicy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.status == "status_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetResourcePolicyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteResourcePolicyRequest, +): transport_class = transports.ResourcePoliciesRestTransport request_init = {} @@ -1304,7 +1312,7 @@ def test_get_rest_required_fields(request_type=compute.GetResourcePolicyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1315,7 +1323,9 @@ def test_get_rest_required_fields(request_type=compute.GetResourcePolicyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1333,7 +1343,7 @@ def test_get_rest_required_fields(request_type=compute.GetResourcePolicyRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ResourcePolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1344,32 +1354,32 @@ def test_get_rest_required_fields(request_type=compute.GetResourcePolicyRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ResourcePolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.ResourcePoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1381,7 +1391,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.ResourcePoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1394,9 +1404,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ResourcePoliciesRestInterceptor, "post_get" + transports.ResourcePoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.ResourcePoliciesRestInterceptor, "pre_get" + transports.ResourcePoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1411,19 +1421,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ResourcePolicy.to_json( - compute.ResourcePolicy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetResourcePolicyRequest() + request = compute.DeleteResourcePolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ResourcePolicy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1435,8 +1443,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetResourcePolicyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteResourcePolicyRequest ): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1460,10 +1468,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1472,7 +1480,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ResourcePolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1492,12 +1500,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ResourcePolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1510,7 +1518,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1519,15 +1527,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetResourcePolicyRequest(), + client.delete_unary( + compute.DeleteResourcePolicyRequest(), project="project_value", region="region_value", resource_policy="resource_policy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1536,53 +1544,740 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyResourcePolicyRequest, + compute.GetResourcePolicyRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = { + "project": "sample1", + "region": "sample2", + "resource_policy": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ResourcePolicy( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + name="name_value", + region="region_value", + self_link="self_link_value", + status="status_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ResourcePolicy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.ResourcePolicy) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.status == "status_value" + + +def test_get_rest_required_fields(request_type=compute.GetResourcePolicyRequest): + transport_class = transports.ResourcePoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resourcePolicy"] = "resource_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resourcePolicy" in jsonified_request + assert jsonified_request["resourcePolicy"] == "resource_policy_value" + + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ResourcePolicy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ResourcePolicy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.ResourcePoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "resourcePolicy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.ResourcePoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ResourcePoliciesRestInterceptor(), + ) + client = ResourcePoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ResourcePoliciesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.ResourcePoliciesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ResourcePolicy.to_json( + compute.ResourcePolicy() + ) + + request = compute.GetResourcePolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ResourcePolicy + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetResourcePolicyRequest +): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "resource_policy": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ResourcePolicy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "resource_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + resource_policy="resource_policy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ResourcePolicy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/resourcePolicies/{resource_policy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetResourcePolicyRequest(), + project="project_value", + region="region_value", + resource_policy="resource_policy_value", + ) + + +def test_get_rest_error(): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyResourcePolicyRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyResourcePolicyRequest, +): + transport_class = transports.ResourcePoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("options_requested_policy_version",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.ResourcePoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("optionsRequestedPolicyVersion",)) + & set( + ( + "project", + "region", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.ResourcePoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ResourcePoliciesRestInterceptor(), + ) + client = ResourcePoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ResourcePoliciesRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.ResourcePoliciesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.GetIamPolicyResourcePolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyResourcePolicyRequest +): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + resource="resource_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + compute.GetIamPolicyResourcePolicyRequest(), + project="project_value", + region="region_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertResourcePolicyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = ResourcePoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["resource_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "group_placement_policy": { + "availability_domain_count": 2650, + "collocation": "collocation_value", + "vm_count": 875, + }, + "id": 205, + "instance_schedule_policy": { + "expiration_time": "expiration_time_value", + "start_time": "start_time_value", + "time_zone": "time_zone_value", + "vm_start_schedule": {"schedule": "schedule_value"}, + "vm_stop_schedule": {}, + }, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "resource_status": { + "instance_schedule_policy": { + "last_run_start_time": "last_run_start_time_value", + "next_run_start_time": "next_run_start_time_value", + } + }, + "self_link": "self_link_value", + "snapshot_schedule_policy": { + "retention_policy": { + "max_retention_days": 1933, + "on_source_disk_delete": "on_source_disk_delete_value", + }, + "schedule": { + "daily_schedule": { + "days_in_cycle": 1366, + "duration": "duration_value", + "start_time": "start_time_value", + }, + "hourly_schedule": { + "duration": "duration_value", + "hours_in_cycle": 1494, + "start_time": "start_time_value", + }, + "weekly_schedule": { + "day_of_weeks": [ + { + "day": "day_value", + "duration": "duration_value", + "start_time": "start_time_value", + } + ] + }, + }, + "snapshot_properties": { + "chain_name": "chain_name_value", + "guest_flush": True, + "labels": {}, + "storage_locations": [ + "storage_locations_value_1", + "storage_locations_value_2", + ], + }, + }, + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyResourcePolicyRequest, -): +def test_insert_rest_required_fields(request_type=compute.InsertResourcePolicyRequest): transport_class = transports.ResourcePoliciesRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1594,20 +2289,19 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1615,8 +2309,6 @@ def test_get_iam_policy_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1625,7 +2317,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1636,44 +2328,45 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.ResourcePoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( "project", "region", - "resource", + "resourcePolicyResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.ResourcePoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1686,9 +2379,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ResourcePoliciesRestInterceptor, "post_get_iam_policy" + transports.ResourcePoliciesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.ResourcePoliciesRestInterceptor, "pre_get_iam_policy" + transports.ResourcePoliciesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1703,17 +2396,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicyResourcePolicyRequest() + request = compute.InsertResourcePolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.insert( request, metadata=[ ("key", "val"), @@ -1725,8 +2418,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyResourcePolicyRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertResourcePolicyRequest ): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1734,7 +2427,71 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["resource_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "group_placement_policy": { + "availability_domain_count": 2650, + "collocation": "collocation_value", + "vm_count": 875, + }, + "id": 205, + "instance_schedule_policy": { + "expiration_time": "expiration_time_value", + "start_time": "start_time_value", + "time_zone": "time_zone_value", + "vm_start_schedule": {"schedule": "schedule_value"}, + "vm_stop_schedule": {}, + }, + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "resource_status": { + "instance_schedule_policy": { + "last_run_start_time": "last_run_start_time_value", + "next_run_start_time": "next_run_start_time_value", + } + }, + "self_link": "self_link_value", + "snapshot_schedule_policy": { + "retention_policy": { + "max_retention_days": 1933, + "on_source_disk_delete": "on_source_disk_delete_value", + }, + "schedule": { + "daily_schedule": { + "days_in_cycle": 1366, + "duration": "duration_value", + "start_time": "start_time_value", + }, + "hourly_schedule": { + "duration": "duration_value", + "hours_in_cycle": 1494, + "start_time": "start_time_value", + }, + "weekly_schedule": { + "day_of_weeks": [ + { + "day": "day_value", + "duration": "duration_value", + "start_time": "start_time_value", + } + ] + }, + }, + "snapshot_properties": { + "chain_name": "chain_name_value", + "guest_flush": True, + "labels": {}, + "storage_locations": [ + "storage_locations_value_1", + "storage_locations_value_2", + ], + }, + }, + "status": "status_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1746,10 +2503,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.insert(request) -def test_get_iam_policy_rest_flattened(): +def test_insert_rest_flattened(): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1758,45 +2515,43 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "resource": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", + resource_policy_resource=compute.ResourcePolicy( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/resourcePolicies" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1805,15 +2560,17 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyResourcePolicyRequest(), + client.insert( + compute.InsertResourcePolicyRequest(), project="project_value", region="region_value", - resource="resource_value", + resource_policy_resource=compute.ResourcePolicy( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_iam_policy_rest_error(): +def test_insert_rest_error(): client = ResourcePoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1938,28 +2695,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -3436,6 +4171,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ResourcePoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_resource_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3474,6 +4222,14 @@ def test_resource_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_resource_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_routers.py b/tests/unit/gapic/compute_v1/test_routers.py index cee322373..47972c56c 100644 --- a/tests/unit/gapic/compute_v1/test_routers.py +++ b/tests/unit/gapic/compute_v1/test_routers.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -859,7 +861,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -903,10 +905,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -931,7 +933,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteRouterRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} @@ -1002,14 +1004,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteRouterRequ response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1028,7 +1030,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -1066,7 +1068,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1078,7 +1080,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteRouterRequest ): client = RoutersClient( @@ -1099,10 +1101,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1136,7 +1138,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1149,7 +1151,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1158,7 +1160,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteRouterRequest(), project="project_value", region="region_value", @@ -1166,7 +1168,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1175,11 +1177,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRouterRequest, + compute.DeleteRouterRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1192,40 +1194,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Router( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - encrypted_interconnect_router=True, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Router.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Router) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.encrypted_interconnect_router is True - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetRouterRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} @@ -1243,7 +1249,7 @@ def test_get_rest_required_fields(request_type=compute.GetRouterRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1254,7 +1260,9 @@ def test_get_rest_required_fields(request_type=compute.GetRouterRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1272,7 +1280,7 @@ def test_get_rest_required_fields(request_type=compute.GetRouterRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Router() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1283,32 +1291,32 @@ def test_get_rest_required_fields(request_type=compute.GetRouterRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Router.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1320,7 +1328,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -1331,9 +1339,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_get" + transports.RoutersRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_get" + transports.RoutersRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1348,17 +1356,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Router.to_json(compute.Router()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRouterRequest() + request = compute.DeleteRouterRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Router + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1370,8 +1378,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRouterRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRouterRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1391,10 +1399,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1403,7 +1411,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Router() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1423,12 +1431,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Router.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1441,7 +1449,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1450,15 +1458,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRouterRequest(), + client.delete_unary( + compute.DeleteRouterRequest(), project="project_value", region="region_value", router="router_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1467,11 +1475,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetNatMappingInfoRoutersRequest, + compute.GetRouterRequest, dict, ], ) -def test_get_nat_mapping_info_rest(request_type): +def test_get_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1484,32 +1492,40 @@ def test_get_nat_mapping_info_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VmEndpointNatMappingsList( - id="id_value", + return_value = compute.Router( + creation_timestamp="creation_timestamp_value", + description="description_value", + encrypted_interconnect_router=True, + id=205, kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + network="network_value", + region="region_value", self_link="self_link_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VmEndpointNatMappingsList.to_json(return_value) + json_return_value = compute.Router.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_nat_mapping_info(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GetNatMappingInfoPager) - assert response.id == "id_value" + assert isinstance(response, compute.Router) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.encrypted_interconnect_router is True + assert response.id == 205 assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.region == "region_value" assert response.self_link == "self_link_value" -def test_get_nat_mapping_info_rest_required_fields( - request_type=compute.GetNatMappingInfoRoutersRequest, -): +def test_get_rest_required_fields(request_type=compute.GetRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} @@ -1527,7 +1543,7 @@ def test_get_nat_mapping_info_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_nat_mapping_info._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1538,17 +1554,7 @@ def test_get_nat_mapping_info_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_nat_mapping_info._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1566,7 +1572,7 @@ def test_get_nat_mapping_info_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.VmEndpointNatMappingsList() + return_value = compute.Router() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1584,33 +1590,25 @@ def test_get_nat_mapping_info_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.VmEndpointNatMappingsList.to_json(return_value) + json_return_value = compute.Router.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_nat_mapping_info(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_nat_mapping_info_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_nat_mapping_info._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( "project", @@ -1622,7 +1620,7 @@ def test_get_nat_mapping_info_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_nat_mapping_info_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -1633,9 +1631,9 @@ def test_get_nat_mapping_info_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_get_nat_mapping_info" + transports.RoutersRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_get_nat_mapping_info" + transports.RoutersRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1650,19 +1648,17 @@ def test_get_nat_mapping_info_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.VmEndpointNatMappingsList.to_json( - compute.VmEndpointNatMappingsList() - ) + req.return_value._content = compute.Router.to_json(compute.Router()) - request = compute.GetNatMappingInfoRoutersRequest() + request = compute.GetRouterRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VmEndpointNatMappingsList + post.return_value = compute.Router - client.get_nat_mapping_info( + client.get( request, metadata=[ ("key", "val"), @@ -1674,8 +1670,8 @@ def test_get_nat_mapping_info_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_nat_mapping_info_rest_bad_request( - transport: str = "rest", request_type=compute.GetNatMappingInfoRoutersRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRouterRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1695,10 +1691,10 @@ def test_get_nat_mapping_info_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_nat_mapping_info(request) + client.get(request) -def test_get_nat_mapping_info_rest_flattened(): +def test_get_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1707,7 +1703,7 @@ def test_get_nat_mapping_info_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VmEndpointNatMappingsList() + return_value = compute.Router() # get arguments that satisfy an http rule for this method sample_request = { @@ -1727,25 +1723,25 @@ def test_get_nat_mapping_info_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VmEndpointNatMappingsList.to_json(return_value) + json_return_value = compute.Router.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_nat_mapping_info(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}/getNatMappingInfo" + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}" % client.transport._host, args[1], ) -def test_get_nat_mapping_info_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1754,118 +1750,65 @@ def test_get_nat_mapping_info_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_nat_mapping_info( - compute.GetNatMappingInfoRoutersRequest(), + client.get( + compute.GetRouterRequest(), project="project_value", region="region_value", router="router_value", ) -def test_get_nat_mapping_info_rest_pager(transport: str = "rest"): +def test_get_rest_error(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetNatMappingInfoRoutersRequest, + dict, + ], +) +def test_get_nat_mapping_info_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + transport="rest", ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.VmEndpointNatMappingsList( - result=[ - compute.VmEndpointNatMappings(), - compute.VmEndpointNatMappings(), - compute.VmEndpointNatMappings(), - ], - next_page_token="abc", - ), - compute.VmEndpointNatMappingsList( - result=[], - next_page_token="def", - ), - compute.VmEndpointNatMappingsList( - result=[ - compute.VmEndpointNatMappings(), - ], - next_page_token="ghi", - ), - compute.VmEndpointNatMappingsList( - result=[ - compute.VmEndpointNatMappings(), - compute.VmEndpointNatMappings(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.VmEndpointNatMappingsList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = { - "project": "sample1", - "region": "sample2", - "router": "sample3", - } - - pager = client.get_nat_mapping_info(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.VmEndpointNatMappings) for i in results) - - pages = list(client.get_nat_mapping_info(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize( - "request_type", - [ - compute.GetRouterStatusRouterRequest, - dict, - ], -) -def test_get_router_status_rest(request_type): - client = RoutersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} - request = request_type(request_init) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} + request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RouterStatusResponse( + return_value = compute.VmEndpointNatMappingsList( + id="id_value", kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RouterStatusResponse.to_json(return_value) + json_return_value = compute.VmEndpointNatMappingsList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_router_status(request) + response = client.get_nat_mapping_info(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.RouterStatusResponse) + assert isinstance(response, pagers.GetNatMappingInfoPager) + assert response.id == "id_value" assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" -def test_get_router_status_rest_required_fields( - request_type=compute.GetRouterStatusRouterRequest, +def test_get_nat_mapping_info_rest_required_fields( + request_type=compute.GetNatMappingInfoRoutersRequest, ): transport_class = transports.RoutersRestTransport @@ -1884,7 +1827,7 @@ def test_get_router_status_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_router_status._get_unset_required_fields(jsonified_request) + ).get_nat_mapping_info._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1895,7 +1838,17 @@ def test_get_router_status_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_router_status._get_unset_required_fields(jsonified_request) + ).get_nat_mapping_info._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1913,7 +1866,7 @@ def test_get_router_status_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RouterStatusResponse() + return_value = compute.VmEndpointNatMappingsList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1931,25 +1884,33 @@ def test_get_router_status_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.RouterStatusResponse.to_json(return_value) + json_return_value = compute.VmEndpointNatMappingsList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_router_status(request) + response = client.get_nat_mapping_info(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_router_status_rest_unset_required_fields(): +def test_get_nat_mapping_info_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_router_status._get_unset_required_fields({}) + unset_fields = transport.get_nat_mapping_info._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) & set( ( "project", @@ -1961,7 +1922,7 @@ def test_get_router_status_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_router_status_rest_interceptors(null_interceptor): +def test_get_nat_mapping_info_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -1972,9 +1933,9 @@ def test_get_router_status_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_get_router_status" + transports.RoutersRestInterceptor, "post_get_nat_mapping_info" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_get_router_status" + transports.RoutersRestInterceptor, "pre_get_nat_mapping_info" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1989,19 +1950,19 @@ def test_get_router_status_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.RouterStatusResponse.to_json( - compute.RouterStatusResponse() + req.return_value._content = compute.VmEndpointNatMappingsList.to_json( + compute.VmEndpointNatMappingsList() ) - request = compute.GetRouterStatusRouterRequest() + request = compute.GetNatMappingInfoRoutersRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RouterStatusResponse + post.return_value = compute.VmEndpointNatMappingsList - client.get_router_status( + client.get_nat_mapping_info( request, metadata=[ ("key", "val"), @@ -2013,8 +1974,8 @@ def test_get_router_status_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_router_status_rest_bad_request( - transport: str = "rest", request_type=compute.GetRouterStatusRouterRequest +def test_get_nat_mapping_info_rest_bad_request( + transport: str = "rest", request_type=compute.GetNatMappingInfoRoutersRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2034,10 +1995,10 @@ def test_get_router_status_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_router_status(request) + client.get_nat_mapping_info(request) -def test_get_router_status_rest_flattened(): +def test_get_nat_mapping_info_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2046,7 +2007,7 @@ def test_get_router_status_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RouterStatusResponse() + return_value = compute.VmEndpointNatMappingsList() # get arguments that satisfy an http rule for this method sample_request = { @@ -2066,25 +2027,25 @@ def test_get_router_status_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RouterStatusResponse.to_json(return_value) + json_return_value = compute.VmEndpointNatMappingsList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_router_status(**mock_args) + client.get_nat_mapping_info(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}/getRouterStatus" + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}/getNatMappingInfo" % client.transport._host, args[1], ) -def test_get_router_status_rest_flattened_error(transport: str = "rest"): +def test_get_nat_mapping_info_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2093,75 +2054,1818 @@ def test_get_router_status_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_router_status( - compute.GetRouterStatusRouterRequest(), + client.get_nat_mapping_info( + compute.GetNatMappingInfoRoutersRequest(), project="project_value", region="region_value", router="router_value", ) -def test_get_router_status_rest_error(): +def test_get_nat_mapping_info_rest_pager(transport: str = "rest"): client = RoutersClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.VmEndpointNatMappingsList( + result=[ + compute.VmEndpointNatMappings(), + compute.VmEndpointNatMappings(), + compute.VmEndpointNatMappings(), + ], + next_page_token="abc", + ), + compute.VmEndpointNatMappingsList( + result=[], + next_page_token="def", + ), + compute.VmEndpointNatMappingsList( + result=[ + compute.VmEndpointNatMappings(), + ], + next_page_token="ghi", + ), + compute.VmEndpointNatMappingsList( + result=[ + compute.VmEndpointNatMappings(), + compute.VmEndpointNatMappings(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.VmEndpointNatMappingsList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "project": "sample1", + "region": "sample2", + "router": "sample3", + } + + pager = client.get_nat_mapping_info(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.VmEndpointNatMappings) for i in results) + + pages = list(client.get_nat_mapping_info(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.InsertRouterRequest, + compute.GetRouterStatusRouterRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_router_status_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["router_resource"] = { - "bgp": { - "advertise_mode": "advertise_mode_value", - "advertised_groups": [ - "advertised_groups_value_1", - "advertised_groups_value_2", - ], - "advertised_ip_ranges": [ - {"description": "description_value", "range_": "range__value"} - ], - "asn": 322, - "keepalive_interval": 1914, - }, - "bgp_peers": [ - { - "advertise_mode": "advertise_mode_value", - "advertised_groups": [ - "advertised_groups_value_1", - "advertised_groups_value_2", - ], - "advertised_ip_ranges": {}, - "advertised_route_priority": 2714, - "bfd": { - "min_receive_interval": 2122, - "min_transmit_interval": 2265, - "multiplier": 1095, - "session_initialization_mode": "session_initialization_mode_value", - }, - "enable": "enable_value", - "enable_ipv6": True, - "interface_name": "interface_name_value", - "ip_address": "ip_address_value", - "ipv6_nexthop_address": "ipv6_nexthop_address_value", - "management_type": "management_type_value", - "name": "name_value", - "peer_asn": 845, - "peer_ip_address": "peer_ip_address_value", - "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", - "router_appliance_instance": "router_appliance_instance_value", - } + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RouterStatusResponse( + kind="kind_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RouterStatusResponse.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_router_status(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.RouterStatusResponse) + assert response.kind == "kind_value" + + +def test_get_router_status_rest_required_fields( + request_type=compute.GetRouterStatusRouterRequest, +): + transport_class = transports.RoutersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["router"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_router_status._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["router"] = "router_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_router_status._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "router" in jsonified_request + assert jsonified_request["router"] == "router_value" + + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RouterStatusResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RouterStatusResponse.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_router_status(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_router_status_rest_unset_required_fields(): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_router_status._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "router", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_router_status_rest_interceptors(null_interceptor): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), + ) + client = RoutersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RoutersRestInterceptor, "post_get_router_status" + ) as post, mock.patch.object( + transports.RoutersRestInterceptor, "pre_get_router_status" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.RouterStatusResponse.to_json( + compute.RouterStatusResponse() + ) + + request = compute.GetRouterStatusRouterRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RouterStatusResponse + + client.get_router_status( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_router_status_rest_bad_request( + transport: str = "rest", request_type=compute.GetRouterStatusRouterRequest +): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_router_status(request) + + +def test_get_router_status_rest_flattened(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RouterStatusResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "router": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + router="router_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RouterStatusResponse.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_router_status(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}/getRouterStatus" + % client.transport._host, + args[1], + ) + + +def test_get_router_status_rest_flattened_error(transport: str = "rest"): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_router_status( + compute.GetRouterStatusRouterRequest(), + project="project_value", + region="region_value", + router="router_value", + ) + + +def test_get_router_status_rest_error(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRouterRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "encrypted_interconnect_router": True, + "id": 205, + "interfaces": [ + { + "ip_range": "ip_range_value", + "linked_interconnect_attachment": "linked_interconnect_attachment_value", + "linked_vpn_tunnel": "linked_vpn_tunnel_value", + "management_type": "management_type_value", + "name": "name_value", + "private_ip_address": "private_ip_address_value", + "redundant_interface": "redundant_interface_value", + "subnetwork": "subnetwork_value", + } + ], + "kind": "kind_value", + "name": "name_value", + "nats": [ + { + "drain_nat_ips": ["drain_nat_ips_value_1", "drain_nat_ips_value_2"], + "enable_dynamic_port_allocation": True, + "enable_endpoint_independent_mapping": True, + "icmp_idle_timeout_sec": 2214, + "log_config": {"enable": True, "filter": "filter_value"}, + "max_ports_per_vm": 1733, + "min_ports_per_vm": 1731, + "name": "name_value", + "nat_ip_allocate_option": "nat_ip_allocate_option_value", + "nat_ips": ["nat_ips_value_1", "nat_ips_value_2"], + "rules": [ + { + "action": { + "source_nat_active_ips": [ + "source_nat_active_ips_value_1", + "source_nat_active_ips_value_2", + ], + "source_nat_drain_ips": [ + "source_nat_drain_ips_value_1", + "source_nat_drain_ips_value_2", + ], + }, + "description": "description_value", + "match": "match_value", + "rule_number": 1184, + } + ], + "source_subnetwork_ip_ranges_to_nat": "source_subnetwork_ip_ranges_to_nat_value", + "subnetworks": [ + { + "name": "name_value", + "secondary_ip_range_names": [ + "secondary_ip_range_names_value_1", + "secondary_ip_range_names_value_2", + ], + "source_ip_ranges_to_nat": [ + "source_ip_ranges_to_nat_value_1", + "source_ip_ranges_to_nat_value_2", + ], + } + ], + "tcp_established_idle_timeout_sec": 3371, + "tcp_time_wait_timeout_sec": 2665, + "tcp_transitory_idle_timeout_sec": 3330, + "udp_idle_timeout_sec": 2118, + } + ], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertRouterRequest): + transport_class = transports.RoutersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "routerResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), + ) + client = RoutersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RoutersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RoutersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRouterRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRouterRequest +): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "encrypted_interconnect_router": True, + "id": 205, + "interfaces": [ + { + "ip_range": "ip_range_value", + "linked_interconnect_attachment": "linked_interconnect_attachment_value", + "linked_vpn_tunnel": "linked_vpn_tunnel_value", + "management_type": "management_type_value", + "name": "name_value", + "private_ip_address": "private_ip_address_value", + "redundant_interface": "redundant_interface_value", + "subnetwork": "subnetwork_value", + } + ], + "kind": "kind_value", + "name": "name_value", + "nats": [ + { + "drain_nat_ips": ["drain_nat_ips_value_1", "drain_nat_ips_value_2"], + "enable_dynamic_port_allocation": True, + "enable_endpoint_independent_mapping": True, + "icmp_idle_timeout_sec": 2214, + "log_config": {"enable": True, "filter": "filter_value"}, + "max_ports_per_vm": 1733, + "min_ports_per_vm": 1731, + "name": "name_value", + "nat_ip_allocate_option": "nat_ip_allocate_option_value", + "nat_ips": ["nat_ips_value_1", "nat_ips_value_2"], + "rules": [ + { + "action": { + "source_nat_active_ips": [ + "source_nat_active_ips_value_1", + "source_nat_active_ips_value_2", + ], + "source_nat_drain_ips": [ + "source_nat_drain_ips_value_1", + "source_nat_drain_ips_value_2", + ], + }, + "description": "description_value", + "match": "match_value", + "rule_number": 1184, + } + ], + "source_subnetwork_ip_ranges_to_nat": "source_subnetwork_ip_ranges_to_nat_value", + "subnetworks": [ + { + "name": "name_value", + "secondary_ip_range_names": [ + "secondary_ip_range_names_value_1", + "secondary_ip_range_names_value_2", + ], + "source_ip_ranges_to_nat": [ + "source_ip_ranges_to_nat_value_1", + "source_ip_ranges_to_nat_value_2", + ], + } + ], + "tcp_established_idle_timeout_sec": 3371, + "tcp_time_wait_timeout_sec": 2665, + "tcp_transitory_idle_timeout_sec": 3330, + "udp_idle_timeout_sec": 2118, + } + ], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + router_resource=compute.Router( + bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/routers" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertRouterRequest(), + project="project_value", + region="region_value", + router_resource=compute.Router( + bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") + ), + ) + + +def test_insert_rest_error(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRouterRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "encrypted_interconnect_router": True, + "id": 205, + "interfaces": [ + { + "ip_range": "ip_range_value", + "linked_interconnect_attachment": "linked_interconnect_attachment_value", + "linked_vpn_tunnel": "linked_vpn_tunnel_value", + "management_type": "management_type_value", + "name": "name_value", + "private_ip_address": "private_ip_address_value", + "redundant_interface": "redundant_interface_value", + "subnetwork": "subnetwork_value", + } + ], + "kind": "kind_value", + "name": "name_value", + "nats": [ + { + "drain_nat_ips": ["drain_nat_ips_value_1", "drain_nat_ips_value_2"], + "enable_dynamic_port_allocation": True, + "enable_endpoint_independent_mapping": True, + "icmp_idle_timeout_sec": 2214, + "log_config": {"enable": True, "filter": "filter_value"}, + "max_ports_per_vm": 1733, + "min_ports_per_vm": 1731, + "name": "name_value", + "nat_ip_allocate_option": "nat_ip_allocate_option_value", + "nat_ips": ["nat_ips_value_1", "nat_ips_value_2"], + "rules": [ + { + "action": { + "source_nat_active_ips": [ + "source_nat_active_ips_value_1", + "source_nat_active_ips_value_2", + ], + "source_nat_drain_ips": [ + "source_nat_drain_ips_value_1", + "source_nat_drain_ips_value_2", + ], + }, + "description": "description_value", + "match": "match_value", + "rule_number": 1184, + } + ], + "source_subnetwork_ip_ranges_to_nat": "source_subnetwork_ip_ranges_to_nat_value", + "subnetworks": [ + { + "name": "name_value", + "secondary_ip_range_names": [ + "secondary_ip_range_names_value_1", + "secondary_ip_range_names_value_2", + ], + "source_ip_ranges_to_nat": [ + "source_ip_ranges_to_nat_value_1", + "source_ip_ranges_to_nat_value_2", + ], + } + ], + "tcp_established_idle_timeout_sec": 3371, + "tcp_time_wait_timeout_sec": 2665, + "tcp_transitory_idle_timeout_sec": 3330, + "udp_idle_timeout_sec": 2118, + } + ], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertRouterRequest): + transport_class = transports.RoutersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "routerResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), + ) + client = RoutersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RoutersRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RoutersRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertRouterRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRouterRequest +): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "encrypted_interconnect_router": True, + "id": 205, + "interfaces": [ + { + "ip_range": "ip_range_value", + "linked_interconnect_attachment": "linked_interconnect_attachment_value", + "linked_vpn_tunnel": "linked_vpn_tunnel_value", + "management_type": "management_type_value", + "name": "name_value", + "private_ip_address": "private_ip_address_value", + "redundant_interface": "redundant_interface_value", + "subnetwork": "subnetwork_value", + } + ], + "kind": "kind_value", + "name": "name_value", + "nats": [ + { + "drain_nat_ips": ["drain_nat_ips_value_1", "drain_nat_ips_value_2"], + "enable_dynamic_port_allocation": True, + "enable_endpoint_independent_mapping": True, + "icmp_idle_timeout_sec": 2214, + "log_config": {"enable": True, "filter": "filter_value"}, + "max_ports_per_vm": 1733, + "min_ports_per_vm": 1731, + "name": "name_value", + "nat_ip_allocate_option": "nat_ip_allocate_option_value", + "nat_ips": ["nat_ips_value_1", "nat_ips_value_2"], + "rules": [ + { + "action": { + "source_nat_active_ips": [ + "source_nat_active_ips_value_1", + "source_nat_active_ips_value_2", + ], + "source_nat_drain_ips": [ + "source_nat_drain_ips_value_1", + "source_nat_drain_ips_value_2", + ], + }, + "description": "description_value", + "match": "match_value", + "rule_number": 1184, + } + ], + "source_subnetwork_ip_ranges_to_nat": "source_subnetwork_ip_ranges_to_nat_value", + "subnetworks": [ + { + "name": "name_value", + "secondary_ip_range_names": [ + "secondary_ip_range_names_value_1", + "secondary_ip_range_names_value_2", + ], + "source_ip_ranges_to_nat": [ + "source_ip_ranges_to_nat_value_1", + "source_ip_ranges_to_nat_value_2", + ], + } + ], + "tcp_established_idle_timeout_sec": 3371, + "tcp_time_wait_timeout_sec": 2665, + "tcp_transitory_idle_timeout_sec": 3330, + "udp_idle_timeout_sec": 2118, + } + ], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + router_resource=compute.Router( + bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/routers" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertRouterRequest(), + project="project_value", + region="region_value", + router_resource=compute.Router( + bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") + ), + ) + + +def test_insert_unary_rest_error(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRoutersRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RouterList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RouterList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListRoutersRequest): + transport_class = transports.RoutersRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.RouterList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RouterList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.RoutersRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), + ) + client = RoutersClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RoutersRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RoutersRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.RouterList.to_json(compute.RouterList()) + + request = compute.ListRoutersRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.RouterList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListRoutersRequest +): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.RouterList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.RouterList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/routers" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListRoutersRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.RouterList( + items=[ + compute.Router(), + compute.Router(), + compute.Router(), + ], + next_page_token="abc", + ), + compute.RouterList( + items=[], + next_page_token="def", + ), + compute.RouterList( + items=[ + compute.Router(), + ], + next_page_token="ghi", + ), + compute.RouterList( + items=[ + compute.Router(), + compute.Router(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.RouterList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Router) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRouterRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RoutersClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } ], "creation_timestamp": "creation_timestamp_value", "description": "description_value", @@ -2270,10 +3974,10 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2298,12 +4002,13 @@ def test_insert_unary_rest(request_type): assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields(request_type=compute.InsertRouterRequest): +def test_patch_rest_required_fields(request_type=compute.PatchRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["router"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2315,17 +4020,18 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertRouterRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["router"] = "router_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2335,6 +4041,8 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertRouterRequ assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "router" in jsonified_request + assert jsonified_request["router"] == "router_value" client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2354,7 +4062,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertRouterRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": request_init, } transcode_result["body"] = {} @@ -2366,25 +4074,26 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertRouterRequ response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", "region", + "router", "routerResource", ) ) @@ -2392,7 +4101,7 @@ def test_insert_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -2403,9 +4112,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_insert" + transports.RoutersRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_insert" + transports.RoutersRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2422,7 +4131,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertRouterRequest() + request = compute.PatchRouterRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2430,7 +4139,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.patch( request, metadata=[ ("key", "val"), @@ -2442,8 +4151,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertRouterRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRouterRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2451,7 +4160,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} request_init["router_resource"] = { "bgp": { "advertise_mode": "advertise_mode_value", @@ -2575,10 +4284,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.patch(request) -def test_insert_unary_rest_flattened(): +def test_patch_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2590,12 +4299,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "router": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + router="router_value", router_resource=compute.Router( bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") ), @@ -2610,20 +4324,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/routers" + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2632,17 +4346,18 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertRouterRequest(), + client.patch( + compute.PatchRouterRequest(), project="project_value", region="region_value", + router="router_value", router_resource=compute.Router( bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") ), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2651,52 +4366,179 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListRoutersRequest, + compute.PatchRouterRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "encrypted_interconnect_router": True, + "id": 205, + "interfaces": [ + { + "ip_range": "ip_range_value", + "linked_interconnect_attachment": "linked_interconnect_attachment_value", + "linked_vpn_tunnel": "linked_vpn_tunnel_value", + "management_type": "management_type_value", + "name": "name_value", + "private_ip_address": "private_ip_address_value", + "redundant_interface": "redundant_interface_value", + "subnetwork": "subnetwork_value", + } + ], + "kind": "kind_value", + "name": "name_value", + "nats": [ + { + "drain_nat_ips": ["drain_nat_ips_value_1", "drain_nat_ips_value_2"], + "enable_dynamic_port_allocation": True, + "enable_endpoint_independent_mapping": True, + "icmp_idle_timeout_sec": 2214, + "log_config": {"enable": True, "filter": "filter_value"}, + "max_ports_per_vm": 1733, + "min_ports_per_vm": 1731, + "name": "name_value", + "nat_ip_allocate_option": "nat_ip_allocate_option_value", + "nat_ips": ["nat_ips_value_1", "nat_ips_value_2"], + "rules": [ + { + "action": { + "source_nat_active_ips": [ + "source_nat_active_ips_value_1", + "source_nat_active_ips_value_2", + ], + "source_nat_drain_ips": [ + "source_nat_drain_ips_value_1", + "source_nat_drain_ips_value_2", + ], + }, + "description": "description_value", + "match": "match_value", + "rule_number": 1184, + } + ], + "source_subnetwork_ip_ranges_to_nat": "source_subnetwork_ip_ranges_to_nat_value", + "subnetworks": [ + { + "name": "name_value", + "secondary_ip_range_names": [ + "secondary_ip_range_names_value_1", + "secondary_ip_range_names_value_2", + ], + "source_ip_ranges_to_nat": [ + "source_ip_ranges_to_nat_value_1", + "source_ip_ranges_to_nat_value_2", + ], + } + ], + "tcp_established_idle_timeout_sec": 3371, + "tcp_time_wait_timeout_sec": 2665, + "tcp_transitory_idle_timeout_sec": 3330, + "udp_idle_timeout_sec": 2118, + } + ], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RouterList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RouterList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListRoutersRequest): +def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["router"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2708,27 +4550,20 @@ def test_list_rest_required_fields(request_type=compute.ListRoutersRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["router"] = "router_value" unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2736,6 +4571,8 @@ def test_list_rest_required_fields(request_type=compute.ListRoutersRequest): assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "router" in jsonified_request + assert jsonified_request["router"] == "router_value" client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2744,7 +4581,7 @@ def test_list_rest_required_fields(request_type=compute.ListRoutersRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RouterList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2755,51 +4592,46 @@ def test_list_rest_required_fields(request_type=compute.ListRoutersRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.RouterList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "router", + "routerResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -2810,9 +4642,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_list" + transports.RoutersRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_list" + transports.RoutersRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2827,17 +4659,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.RouterList.to_json(compute.RouterList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListRoutersRequest() + request = compute.PatchRouterRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RouterList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -2849,8 +4681,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListRoutersRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRouterRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2858,7 +4690,119 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "router": "sample3"} + request_init["router_resource"] = { + "bgp": { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": [ + {"description": "description_value", "range_": "range__value"} + ], + "asn": 322, + "keepalive_interval": 1914, + }, + "bgp_peers": [ + { + "advertise_mode": "advertise_mode_value", + "advertised_groups": [ + "advertised_groups_value_1", + "advertised_groups_value_2", + ], + "advertised_ip_ranges": {}, + "advertised_route_priority": 2714, + "bfd": { + "min_receive_interval": 2122, + "min_transmit_interval": 2265, + "multiplier": 1095, + "session_initialization_mode": "session_initialization_mode_value", + }, + "enable": "enable_value", + "enable_ipv6": True, + "interface_name": "interface_name_value", + "ip_address": "ip_address_value", + "ipv6_nexthop_address": "ipv6_nexthop_address_value", + "management_type": "management_type_value", + "name": "name_value", + "peer_asn": 845, + "peer_ip_address": "peer_ip_address_value", + "peer_ipv6_nexthop_address": "peer_ipv6_nexthop_address_value", + "router_appliance_instance": "router_appliance_instance_value", + } + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "encrypted_interconnect_router": True, + "id": 205, + "interfaces": [ + { + "ip_range": "ip_range_value", + "linked_interconnect_attachment": "linked_interconnect_attachment_value", + "linked_vpn_tunnel": "linked_vpn_tunnel_value", + "management_type": "management_type_value", + "name": "name_value", + "private_ip_address": "private_ip_address_value", + "redundant_interface": "redundant_interface_value", + "subnetwork": "subnetwork_value", + } + ], + "kind": "kind_value", + "name": "name_value", + "nats": [ + { + "drain_nat_ips": ["drain_nat_ips_value_1", "drain_nat_ips_value_2"], + "enable_dynamic_port_allocation": True, + "enable_endpoint_independent_mapping": True, + "icmp_idle_timeout_sec": 2214, + "log_config": {"enable": True, "filter": "filter_value"}, + "max_ports_per_vm": 1733, + "min_ports_per_vm": 1731, + "name": "name_value", + "nat_ip_allocate_option": "nat_ip_allocate_option_value", + "nat_ips": ["nat_ips_value_1", "nat_ips_value_2"], + "rules": [ + { + "action": { + "source_nat_active_ips": [ + "source_nat_active_ips_value_1", + "source_nat_active_ips_value_2", + ], + "source_nat_drain_ips": [ + "source_nat_drain_ips_value_1", + "source_nat_drain_ips_value_2", + ], + }, + "description": "description_value", + "match": "match_value", + "rule_number": 1184, + } + ], + "source_subnetwork_ip_ranges_to_nat": "source_subnetwork_ip_ranges_to_nat_value", + "subnetworks": [ + { + "name": "name_value", + "secondary_ip_range_names": [ + "secondary_ip_range_names_value_1", + "secondary_ip_range_names_value_2", + ], + "source_ip_ranges_to_nat": [ + "source_ip_ranges_to_nat_value_1", + "source_ip_ranges_to_nat_value_2", + ], + } + ], + "tcp_established_idle_timeout_sec": 3371, + "tcp_time_wait_timeout_sec": 2665, + "tcp_transitory_idle_timeout_sec": 3330, + "udp_idle_timeout_sec": 2118, + } + ], + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2870,10 +4814,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2882,40 +4826,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RouterList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "router": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + router="router_value", + router_resource=compute.Router( + bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RouterList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/routers" + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2924,82 +4876,31 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListRoutersRequest(), + client.patch_unary( + compute.PatchRouterRequest(), project="project_value", region="region_value", + router="router_value", + router_resource=compute.Router( + bgp=compute.RouterBgp(advertise_mode="advertise_mode_value") + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = RoutersClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.RouterList( - items=[ - compute.Router(), - compute.Router(), - compute.Router(), - ], - next_page_token="abc", - ), - compute.RouterList( - items=[], - next_page_token="def", - ), - compute.RouterList( - items=[ - compute.Router(), - ], - next_page_token="ghi", - ), - compute.RouterList( - items=[ - compute.Router(), - compute.Router(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.RouterList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Router) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchRouterRequest, + compute.PreviewRouterRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_preview_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3124,66 +5025,21 @@ def test_patch_unary_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", - ) + return_value = compute.RoutersPreviewResponse() # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.RoutersPreviewResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.preview(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.RoutersPreviewResponse) -def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterRequest): +def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} @@ -3201,7 +5057,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).preview._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3212,9 +5068,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).preview._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3232,7 +5086,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.RoutersPreviewResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3243,7 +5097,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -3251,25 +5105,25 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchRouterReques response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.RoutersPreviewResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.preview(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_preview_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.preview._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", @@ -3282,7 +5136,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_preview_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -3293,9 +5147,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_patch" + transports.RoutersRestInterceptor, "post_preview" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_patch" + transports.RoutersRestInterceptor, "pre_preview" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3310,17 +5164,19 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.RoutersPreviewResponse.to_json( + compute.RoutersPreviewResponse() + ) - request = compute.PatchRouterRequest() + request = compute.PreviewRouterRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.RoutersPreviewResponse - client.patch_unary( + client.preview( request, metadata=[ ("key", "val"), @@ -3332,8 +5188,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRouterRequest +def test_preview_rest_bad_request( + transport: str = "rest", request_type=compute.PreviewRouterRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3465,10 +5321,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.preview(request) -def test_patch_unary_rest_flattened(): +def test_preview_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3477,7 +5333,7 @@ def test_patch_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.RoutersPreviewResponse() # get arguments that satisfy an http rule for this method sample_request = { @@ -3500,25 +5356,25 @@ def test_patch_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.RoutersPreviewResponse.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.preview(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}" + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}/preview" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_preview_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3527,8 +5383,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchRouterRequest(), + client.preview( + compute.PreviewRouterRequest(), project="project_value", region="region_value", router="router_value", @@ -3538,7 +5394,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_preview_rest_error(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3547,11 +5403,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PreviewRouterRequest, + compute.UpdateRouterRequest, dict, ], ) -def test_preview_rest(request_type): +def test_update_rest(request_type): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3676,21 +5532,66 @@ def test_preview_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RoutersPreviewResponse() + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RoutersPreviewResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.preview(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.RoutersPreviewResponse) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest): +def test_update_rest_required_fields(request_type=compute.UpdateRouterRequest): transport_class = transports.RoutersRestTransport request_init = {} @@ -3708,7 +5609,7 @@ def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).preview._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3719,7 +5620,9 @@ def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).preview._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3737,7 +5640,7 @@ def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.RoutersPreviewResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3748,7 +5651,7 @@ def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -3756,25 +5659,25 @@ def test_preview_rest_required_fields(request_type=compute.PreviewRouterRequest) response_value = Response() response_value.status_code = 200 - json_return_value = compute.RoutersPreviewResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.preview(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_preview_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.preview._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -3787,7 +5690,7 @@ def test_preview_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_preview_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.RoutersRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutersRestInterceptor(), @@ -3798,9 +5701,9 @@ def test_preview_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutersRestInterceptor, "post_preview" + transports.RoutersRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.RoutersRestInterceptor, "pre_preview" + transports.RoutersRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3815,19 +5718,17 @@ def test_preview_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.RoutersPreviewResponse.to_json( - compute.RoutersPreviewResponse() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PreviewRouterRequest() + request = compute.UpdateRouterRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RoutersPreviewResponse + post.return_value = compute.Operation - client.preview( + client.update( request, metadata=[ ("key", "val"), @@ -3839,8 +5740,8 @@ def test_preview_rest_interceptors(null_interceptor): post.assert_called_once() -def test_preview_rest_bad_request( - transport: str = "rest", request_type=compute.PreviewRouterRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateRouterRequest ): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3972,10 +5873,10 @@ def test_preview_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.preview(request) + client.update(request) -def test_preview_rest_flattened(): +def test_update_rest_flattened(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3984,7 +5885,7 @@ def test_preview_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.RoutersPreviewResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -4007,25 +5908,25 @@ def test_preview_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.RoutersPreviewResponse.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.preview(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}/preview" + "%s/compute/v1/projects/{project}/regions/{region}/routers/{router}" % client.transport._host, args[1], ) -def test_preview_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4034,8 +5935,8 @@ def test_preview_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.preview( - compute.PreviewRouterRequest(), + client.update( + compute.UpdateRouterRequest(), project="project_value", region="region_value", router="router_value", @@ -4045,7 +5946,7 @@ def test_preview_rest_flattened_error(transport: str = "rest"): ) -def test_preview_rest_error(): +def test_update_rest_error(): client = RoutersClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4218,28 +6119,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields(request_type=compute.UpdateRouterRequest): @@ -4678,6 +6557,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RoutersClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_routers_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4718,6 +6610,14 @@ def test_routers_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_routers_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_routes.py b/tests/unit/gapic/compute_v1/test_routes.py index 09dae6700..824a05f14 100644 --- a/tests/unit/gapic/compute_v1/test_routes.py +++ b/tests/unit/gapic/compute_v1/test_routes.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -509,7 +511,7 @@ def test_routes_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -553,10 +555,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -581,7 +583,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteRouteRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteRouteRequest): transport_class = transports.RoutesRestTransport request_init = {} @@ -648,14 +650,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteRouteReque response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.RoutesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -673,7 +675,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.RoutesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutesRestInterceptor(), @@ -711,7 +713,595 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRouteRequest +): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "route": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "route": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + route="route_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/routes/{route}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteRouteRequest(), + project="project_value", + route="route_value", + ) + + +def test_delete_rest_error(): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRouteRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "route": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields(request_type=compute.DeleteRouteRequest): + transport_class = transports.RoutesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["route"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["route"] = "route_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "route" in jsonified_request + assert jsonified_request["route"] == "route_value" + + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.RoutesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "route", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.RoutesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.RoutesRestInterceptor(), + ) + client = RoutesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RoutesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RoutesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteRouteRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteRouteRequest +): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "route": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "route": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + route="route_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/routes/{route}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteRouteRequest(), + project="project_value", + route="route_value", + ) + + +def test_delete_unary_rest_error(): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRouteRequest, + dict, + ], +) +def test_get_rest(request_type): + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "route": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Route( + creation_timestamp="creation_timestamp_value", + description="description_value", + dest_range="dest_range_value", + id=205, + kind="kind_value", + name="name_value", + network="network_value", + next_hop_gateway="next_hop_gateway_value", + next_hop_ilb="next_hop_ilb_value", + next_hop_instance="next_hop_instance_value", + next_hop_ip="next_hop_ip_value", + next_hop_network="next_hop_network_value", + next_hop_peering="next_hop_peering_value", + next_hop_vpn_tunnel="next_hop_vpn_tunnel_value", + priority=898, + route_status="route_status_value", + route_type="route_type_value", + self_link="self_link_value", + tags=["tags_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Route.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Route) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.dest_range == "dest_range_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.next_hop_gateway == "next_hop_gateway_value" + assert response.next_hop_ilb == "next_hop_ilb_value" + assert response.next_hop_instance == "next_hop_instance_value" + assert response.next_hop_ip == "next_hop_ip_value" + assert response.next_hop_network == "next_hop_network_value" + assert response.next_hop_peering == "next_hop_peering_value" + assert response.next_hop_vpn_tunnel == "next_hop_vpn_tunnel_value" + assert response.priority == 898 + assert response.route_status == "route_status_value" + assert response.route_type == "route_type_value" + assert response.self_link == "self_link_value" + assert response.tags == ["tags_value"] + + +def test_get_rest_required_fields(request_type=compute.GetRouteRequest): + transport_class = transports.RoutesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["route"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["route"] = "route_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "route" in jsonified_request + assert jsonified_request["route"] == "route_value" + + client = RoutesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Route() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Route.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.RoutesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "route", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.RoutesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.RoutesRestInterceptor(), + ) + client = RoutesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RoutesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.RoutesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Route.to_json(compute.Route()) + + request = compute.GetRouteRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Route + + client.get( request, metadata=[ ("key", "val"), @@ -723,8 +1313,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteRouteRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetRouteRequest ): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -744,10 +1334,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -756,7 +1346,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Route() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "route": "sample2"} @@ -771,12 +1361,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Route.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -789,7 +1379,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -798,14 +1388,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteRouteRequest(), + client.get( + compute.GetRouteRequest(), project="project_value", route="route_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -814,82 +1404,118 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRouteRequest, + compute.InsertRouteRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "route": "sample2"} + request_init = {"project": "sample1"} + request_init["route_resource"] = { + "as_paths": [ + {"as_lists": [867, 868], "path_segment_type": "path_segment_type_value"} + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dest_range": "dest_range_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "next_hop_gateway": "next_hop_gateway_value", + "next_hop_ilb": "next_hop_ilb_value", + "next_hop_instance": "next_hop_instance_value", + "next_hop_ip": "next_hop_ip_value", + "next_hop_network": "next_hop_network_value", + "next_hop_peering": "next_hop_peering_value", + "next_hop_vpn_tunnel": "next_hop_vpn_tunnel_value", + "priority": 898, + "route_status": "route_status_value", + "route_type": "route_type_value", + "self_link": "self_link_value", + "tags": ["tags_value_1", "tags_value_2"], + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Route( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - dest_range="dest_range_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - next_hop_gateway="next_hop_gateway_value", - next_hop_ilb="next_hop_ilb_value", - next_hop_instance="next_hop_instance_value", - next_hop_ip="next_hop_ip_value", - next_hop_network="next_hop_network_value", - next_hop_peering="next_hop_peering_value", - next_hop_vpn_tunnel="next_hop_vpn_tunnel_value", - priority=898, - route_status="route_status_value", - route_type="route_type_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - tags=["tags_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Route.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Route) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.dest_range == "dest_range_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.next_hop_gateway == "next_hop_gateway_value" - assert response.next_hop_ilb == "next_hop_ilb_value" - assert response.next_hop_instance == "next_hop_instance_value" - assert response.next_hop_ip == "next_hop_ip_value" - assert response.next_hop_network == "next_hop_network_value" - assert response.next_hop_peering == "next_hop_peering_value" - assert response.next_hop_vpn_tunnel == "next_hop_vpn_tunnel_value" - assert response.priority == 898 - assert response.route_status == "route_status_value" - assert response.route_type == "route_type_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.tags == ["tags_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetRouteRequest): +def test_insert_rest_required_fields(request_type=compute.InsertRouteRequest): transport_class = transports.RoutesRestTransport request_init = {} request_init["project"] = "" - request_init["route"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -901,24 +1527,23 @@ def test_get_rest_required_fields(request_type=compute.GetRouteRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["route"] = "route_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "route" in jsonified_request - assert jsonified_request["route"] == "route_value" client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -927,7 +1552,7 @@ def test_get_rest_required_fields(request_type=compute.GetRouteRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Route() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -938,43 +1563,44 @@ def test_get_rest_required_fields(request_type=compute.GetRouteRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Route.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.RoutesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", - "route", + "routeResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.RoutesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.RoutesRestInterceptor(), @@ -985,9 +1611,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.RoutesRestInterceptor, "post_get" + transports.RoutesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.RoutesRestInterceptor, "pre_get" + transports.RoutesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1002,17 +1628,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Route.to_json(compute.Route()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRouteRequest() + request = compute.InsertRouteRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Route + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1024,8 +1650,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetRouteRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertRouteRequest ): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1033,7 +1659,38 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "route": "sample2"} + request_init = {"project": "sample1"} + request_init["route_resource"] = { + "as_paths": [ + {"as_lists": [867, 868], "path_segment_type": "path_segment_type_value"} + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "dest_range": "dest_range_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "next_hop_gateway": "next_hop_gateway_value", + "next_hop_ilb": "next_hop_ilb_value", + "next_hop_instance": "next_hop_instance_value", + "next_hop_ip": "next_hop_ip_value", + "next_hop_network": "next_hop_network_value", + "next_hop_peering": "next_hop_peering_value", + "next_hop_vpn_tunnel": "next_hop_vpn_tunnel_value", + "priority": 898, + "route_status": "route_status_value", + "route_type": "route_type_value", + "self_link": "self_link_value", + "tags": ["tags_value_1", "tags_value_2"], + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1045,10 +1702,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1057,40 +1714,41 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Route() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "route": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - route="route_value", + route_resource=compute.Route( + as_paths=[compute.RouteAsPath(as_lists=[866])] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Route.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/routes/{route}" - % client.transport._host, + "%s/compute/v1/projects/{project}/global/routes" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1099,14 +1757,16 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetRouteRequest(), + client.insert( + compute.InsertRouteRequest(), project="project_value", - route="route_value", + route_resource=compute.Route( + as_paths=[compute.RouteAsPath(as_lists=[866])] + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = RoutesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1198,28 +1858,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields(request_type=compute.InsertRouteRequest): @@ -1890,6 +2528,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RoutesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_routes_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1924,6 +2575,14 @@ def test_routes_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_routes_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_security_policies.py b/tests/unit/gapic/compute_v1/test_security_policies.py index bc6eca17c..eab61b00b 100644 --- a/tests/unit/gapic/compute_v1/test_security_policies.py +++ b/tests/unit/gapic/compute_v1/test_security_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_security_policies_client_client_options_credentials_file( dict, ], ) -def test_add_rule_unary_rest(request_type): +def test_add_rule_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -630,10 +632,10 @@ def test_add_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -658,7 +660,7 @@ def test_add_rule_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_rule_unary_rest_required_fields( +def test_add_rule_rest_required_fields( request_type=compute.AddRuleSecurityPolicyRequest, ): transport_class = transports.SecurityPoliciesRestTransport @@ -726,14 +728,14 @@ def test_add_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_rule_unary(request) + response = client.add_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_rule_unary_rest_unset_required_fields(): +def test_add_rule_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -752,7 +754,7 @@ def test_add_rule_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_rule_unary_rest_interceptors(null_interceptor): +def test_add_rule_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -792,7 +794,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_rule_unary( + client.add_rule( request, metadata=[ ("key", "val"), @@ -804,7 +806,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_rule_unary_rest_bad_request( +def test_add_rule_rest_bad_request( transport: str = "rest", request_type=compute.AddRuleSecurityPolicyRequest ): client = SecurityPoliciesClient( @@ -866,10 +868,10 @@ def test_add_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_rule_unary(request) + client.add_rule(request) -def test_add_rule_unary_rest_flattened(): +def test_add_rule_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -901,7 +903,7 @@ def test_add_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_rule_unary(**mock_args) + client.add_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -914,7 +916,7 @@ def test_add_rule_unary_rest_flattened(): ) -def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_add_rule_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -923,7 +925,7 @@ def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_rule_unary( + client.add_rule( compute.AddRuleSecurityPolicyRequest(), project="project_value", security_policy="security_policy_value", @@ -933,7 +935,7 @@ def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_rule_unary_rest_error(): +def test_add_rule_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -942,57 +944,109 @@ def test_add_rule_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListSecurityPoliciesRequest, + compute.AddRuleSecurityPolicyRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_rule_unary_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPoliciesAggregatedList( - etag="etag_value", - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPoliciesAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_rule_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.etag == "etag_value" - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert isinstance(response, compute.Operation) -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListSecurityPoliciesRequest, +def test_add_rule_unary_rest_required_fields( + request_type=compute.AddRuleSecurityPolicyRequest, ): transport_class = transports.SecurityPoliciesRestTransport request_init = {} request_init["project"] = "" + request_init["security_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1004,32 +1058,24 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["securityPolicy"] = "security_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).add_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1038,7 +1084,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPoliciesAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1049,49 +1095,45 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPoliciesAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_rule_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_rule_unary_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_rule._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(()) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "securityPolicy", + "securityPolicyRuleResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_rule_unary_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1104,9 +1146,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_aggregated_list" + transports.SecurityPoliciesRestInterceptor, "post_add_rule" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_aggregated_list" + transports.SecurityPoliciesRestInterceptor, "pre_add_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1121,19 +1163,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SecurityPoliciesAggregatedList.to_json( - compute.SecurityPoliciesAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListSecurityPoliciesRequest() + request = compute.AddRuleSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPoliciesAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_rule_unary( request, metadata=[ ("key", "val"), @@ -1145,8 +1185,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListSecurityPoliciesRequest +def test_add_rule_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddRuleSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1154,7 +1194,48 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1166,10 +1247,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_rule_unary(request) -def test_aggregated_list_rest_flattened(): +def test_add_rule_unary_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1178,39 +1259,43 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPoliciesAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "security_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + security_policy="security_policy_value", + security_policy_rule_resource=compute.SecurityPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPoliciesAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/securityPolicies" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/addRule" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_rule_unary_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1219,174 +1304,76 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListSecurityPoliciesRequest(), + client.add_rule_unary( + compute.AddRuleSecurityPolicyRequest(), project="project_value", + security_policy="security_policy_value", + security_policy_rule_resource=compute.SecurityPolicyRule( + action="action_value" + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_rule_unary_rest_error(): client = SecurityPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.SecurityPoliciesAggregatedList( - items={ - "a": compute.SecurityPoliciesScopedList(), - "b": compute.SecurityPoliciesScopedList(), - "c": compute.SecurityPoliciesScopedList(), - }, - next_page_token="abc", - ), - compute.SecurityPoliciesAggregatedList( - items={}, - next_page_token="def", - ), - compute.SecurityPoliciesAggregatedList( - items={ - "g": compute.SecurityPoliciesScopedList(), - }, - next_page_token="ghi", - ), - compute.SecurityPoliciesAggregatedList( - items={ - "h": compute.SecurityPoliciesScopedList(), - "i": compute.SecurityPoliciesScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.SecurityPoliciesAggregatedList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.SecurityPoliciesScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == ( - str, - compute.SecurityPoliciesScopedList, - ) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.SecurityPoliciesScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.DeleteSecurityPolicyRequest, + compute.AggregatedListSecurityPoliciesRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_aggregated_list_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "security_policy": "sample2"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", + return_value = compute.SecurityPoliciesAggregatedList( + etag="etag_value", + id="id_value", kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPoliciesAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.AggregatedListPager) + assert response.etag == "etag_value" + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.unreachables == ["unreachables_value"] -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteSecurityPolicyRequest, +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListSecurityPoliciesRequest, ): transport_class = transports.SecurityPoliciesRestTransport request_init = {} request_init["project"] = "" - request_init["security_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1398,26 +1385,32 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["securityPolicy"] = "security_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "securityPolicy" in jsonified_request - assert jsonified_request["securityPolicy"] == "security_policy_value" client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1426,7 +1419,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SecurityPoliciesAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1437,43 +1430,49 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPoliciesAggregatedList.to_json( + return_value + ) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) - & set( + set( ( - "project", - "securityPolicy", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1486,9 +1485,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_delete" + transports.SecurityPoliciesRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_delete" + transports.SecurityPoliciesRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1503,17 +1502,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.SecurityPoliciesAggregatedList.to_json( + compute.SecurityPoliciesAggregatedList() + ) - request = compute.DeleteSecurityPolicyRequest() + request = compute.AggregatedListSecurityPoliciesRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.SecurityPoliciesAggregatedList - client.delete_unary( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -1525,8 +1526,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteSecurityPolicyRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListSecurityPoliciesRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1534,7 +1535,7 @@ def test_delete_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "security_policy": "sample2"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1546,10 +1547,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.aggregated_list(request) -def test_delete_unary_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1558,40 +1559,39 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SecurityPoliciesAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "security_policy": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - security_policy="security_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPoliciesAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}" + "%s/compute/v1/projects/{project}/aggregated/securityPolicies" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1600,73 +1600,167 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteSecurityPolicyRequest(), + client.aggregated_list( + compute.AggregatedListSecurityPoliciesRequest(), project="project_value", - security_policy="security_policy_value", ) -def test_delete_unary_rest_error(): - client = SecurityPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - -@pytest.mark.parametrize( - "request_type", - [ - compute.GetSecurityPolicyRequest, - dict, - ], -) -def test_get_rest(request_type): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "security_policy": "sample2"} - request = request_type(request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicy( - creation_timestamp="creation_timestamp_value", - description="description_value", - fingerprint="fingerprint_value", - id=205, - kind="kind_value", - name="name_value", - region="region_value", - self_link="self_link_value", - type_="type__value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.SecurityPolicy.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.get(request) + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.SecurityPoliciesAggregatedList( + items={ + "a": compute.SecurityPoliciesScopedList(), + "b": compute.SecurityPoliciesScopedList(), + "c": compute.SecurityPoliciesScopedList(), + }, + next_page_token="abc", + ), + compute.SecurityPoliciesAggregatedList( + items={}, + next_page_token="def", + ), + compute.SecurityPoliciesAggregatedList( + items={ + "g": compute.SecurityPoliciesScopedList(), + }, + next_page_token="ghi", + ), + compute.SecurityPoliciesAggregatedList( + items={ + "h": compute.SecurityPoliciesScopedList(), + "i": compute.SecurityPoliciesScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.SecurityPoliciesAggregatedList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.SecurityPoliciesScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == ( + str, + compute.SecurityPoliciesScopedList, + ) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.SecurityPoliciesScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteSecurityPolicyRequest, + dict, + ], +) +def test_delete_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SecurityPolicy) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.type_ == "type__value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetSecurityPolicyRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteSecurityPolicyRequest): transport_class = transports.SecurityPoliciesRestTransport request_init = {} @@ -1683,7 +1777,7 @@ def test_get_rest_required_fields(request_type=compute.GetSecurityPolicyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1693,7 +1787,9 @@ def test_get_rest_required_fields(request_type=compute.GetSecurityPolicyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1709,7 +1805,7 @@ def test_get_rest_required_fields(request_type=compute.GetSecurityPolicyRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1720,32 +1816,32 @@ def test_get_rest_required_fields(request_type=compute.GetSecurityPolicyRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1756,7 +1852,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1769,9 +1865,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_get" + transports.SecurityPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_get" + transports.SecurityPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1786,19 +1882,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SecurityPolicy.to_json( - compute.SecurityPolicy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetSecurityPolicyRequest() + request = compute.DeleteSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicy + post.return_value = compute.Operation - client.get( + client.delete( request, metadata=[ ("key", "val"), @@ -1810,8 +1904,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetSecurityPolicyRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1831,10 +1925,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete(request) -def test_get_rest_flattened(): +def test_delete_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1843,7 +1937,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "security_policy": "sample2"} @@ -1858,12 +1952,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1876,7 +1970,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1885,14 +1979,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetSecurityPolicyRequest(), + client.delete( + compute.DeleteSecurityPolicyRequest(), project="project_value", security_policy="security_policy_value", ) -def test_get_rest_error(): +def test_delete_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1901,11 +1995,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetRuleSecurityPolicyRequest, + compute.DeleteSecurityPolicyRequest, dict, ], ) -def test_get_rule_rest(request_type): +def test_delete_unary_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1918,33 +2012,45 @@ def test_get_rule_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyRule( - action="action_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - preview=True, - priority=898, + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SecurityPolicyRule) - assert response.action == "action_value" - assert response.description == "description_value" - assert response.kind == "kind_value" - assert response.preview is True - assert response.priority == 898 + assert isinstance(response, compute.Operation) -def test_get_rule_rest_required_fields( - request_type=compute.GetRuleSecurityPolicyRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteSecurityPolicyRequest, ): transport_class = transports.SecurityPoliciesRestTransport @@ -1962,7 +2068,7 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1972,9 +2078,9 @@ def test_get_rule_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_rule._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("priority",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1990,7 +2096,7 @@ def test_get_rule_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyRule() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2001,32 +2107,32 @@ def test_get_rule_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_rule(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rule_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_rule._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("priority",)) + set(("requestId",)) & set( ( "project", @@ -2037,7 +2143,7 @@ def test_get_rule_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rule_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2050,9 +2156,9 @@ def test_get_rule_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_get_rule" + transports.SecurityPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_get_rule" + transports.SecurityPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2067,19 +2173,17 @@ def test_get_rule_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SecurityPolicyRule.to_json( - compute.SecurityPolicyRule() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetRuleSecurityPolicyRequest() + request = compute.DeleteSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicyRule + post.return_value = compute.Operation - client.get_rule( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2091,8 +2195,8 @@ def test_get_rule_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rule_rest_bad_request( - transport: str = "rest", request_type=compute.GetRuleSecurityPolicyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2112,10 +2216,10 @@ def test_get_rule_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_rule(request) + client.delete_unary(request) -def test_get_rule_rest_flattened(): +def test_delete_unary_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2124,7 +2228,7 @@ def test_get_rule_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyRule() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "security_policy": "sample2"} @@ -2139,25 +2243,25 @@ def test_get_rule_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyRule.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_rule(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/getRule" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}" % client.transport._host, args[1], ) -def test_get_rule_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2166,14 +2270,14 @@ def test_get_rule_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_rule( - compute.GetRuleSecurityPolicyRequest(), + client.delete_unary( + compute.DeleteSecurityPolicyRequest(), project="project_value", security_policy="security_policy_value", ) -def test_get_rule_rest_error(): +def test_delete_unary_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2182,158 +2286,62 @@ def test_get_rule_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertSecurityPolicyRequest, + compute.GetSecurityPolicyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["security_policy_resource"] = { - "adaptive_protection_config": { - "layer7_ddos_defense_config": { - "enable": True, - "rule_visibility": "rule_visibility_value", - } - }, - "advanced_options_config": { - "json_parsing": "json_parsing_value", - "log_level": "log_level_value", - }, - "creation_timestamp": "creation_timestamp_value", - "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, - "region": "region_value", - "rules": [ - { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": [ - "src_ip_ranges_value_1", - "src_ip_ranges_value_2", - ] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } - ], - "self_link": "self_link_value", - "type_": "type__value", - } + request_init = {"project": "sample1", "security_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.SecurityPolicy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + type_="type__value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.SecurityPolicy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.type_ == "type__value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertSecurityPolicyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetSecurityPolicyRequest): transport_class = transports.SecurityPoliciesRestTransport request_init = {} request_init["project"] = "" + request_init["security_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2345,23 +2353,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["securityPolicy"] = "security_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2370,7 +2379,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SecurityPolicy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2381,44 +2390,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "securityPolicyResource", + "securityPolicy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2431,9 +2439,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_insert" + transports.SecurityPoliciesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_insert" + transports.SecurityPoliciesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2448,17 +2456,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.SecurityPolicy.to_json( + compute.SecurityPolicy() + ) - request = compute.InsertSecurityPolicyRequest() + request = compute.GetSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.SecurityPolicy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -2470,8 +2480,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertSecurityPolicyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2479,76 +2489,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["security_policy_resource"] = { - "adaptive_protection_config": { - "layer7_ddos_defense_config": { - "enable": True, - "rule_visibility": "rule_visibility_value", - } - }, - "advanced_options_config": { - "json_parsing": "json_parsing_value", - "log_level": "log_level_value", - }, - "creation_timestamp": "creation_timestamp_value", - "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, - "region": "region_value", - "rules": [ - { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": [ - "src_ip_ranges_value_1", - "src_ip_ranges_value_2", - ] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } - ], - "self_link": "self_link_value", - "type_": "type__value", - } + request_init = {"project": "sample1", "security_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2560,10 +2501,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2572,46 +2513,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SecurityPolicy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "security_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - security_policy_resource=compute.SecurityPolicy( - adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( - layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( - enable=True - ) - ) - ), + security_policy="security_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SecurityPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2620,20 +2555,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertSecurityPolicyRequest(), + client.get( + compute.GetSecurityPolicyRequest(), project="project_value", - security_policy_resource=compute.SecurityPolicy( - adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( - layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( - enable=True - ) - ) - ), + security_policy="security_policy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2642,49 +2571,56 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListSecurityPoliciesRequest, + compute.GetRuleSecurityPolicyRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rule_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "security_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyList( - id="id_value", + return_value = compute.SecurityPolicyRule( + action="action_value", + description="description_value", kind="kind_value", - next_page_token="next_page_token_value", + preview=True, + priority=898, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyList.to_json(return_value) + json_return_value = compute.SecurityPolicyRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.SecurityPolicyRule) + assert response.action == "action_value" + assert response.description == "description_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.preview is True + assert response.priority == 898 -def test_list_rest_required_fields(request_type=compute.ListSecurityPoliciesRequest): +def test_get_rule_rest_required_fields( + request_type=compute.GetRuleSecurityPolicyRequest, +): transport_class = transports.SecurityPoliciesRestTransport request_init = {} request_init["project"] = "" + request_init["security_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2696,31 +2632,26 @@ def test_list_rest_required_fields(request_type=compute.ListSecurityPoliciesRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["securityPolicy"] = "security_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("priority",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2729,7 +2660,7 @@ def test_list_rest_required_fields(request_type=compute.ListSecurityPoliciesRequ request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyList() + return_value = compute.SecurityPolicyRule() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2747,39 +2678,36 @@ def test_list_rest_required_fields(request_type=compute.ListSecurityPoliciesRequ response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyList.to_json(return_value) + json_return_value = compute.SecurityPolicyRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_rule_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get_rule._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("priority",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "securityPolicy", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_rule_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2792,9 +2720,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_list" + transports.SecurityPoliciesRestInterceptor, "post_get_rule" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_list" + transports.SecurityPoliciesRestInterceptor, "pre_get_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2809,19 +2737,19 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SecurityPolicyList.to_json( - compute.SecurityPolicyList() + req.return_value._content = compute.SecurityPolicyRule.to_json( + compute.SecurityPolicyRule() ) - request = compute.ListSecurityPoliciesRequest() + request = compute.GetRuleSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicyList + post.return_value = compute.SecurityPolicyRule - client.list( + client.get_rule( request, metadata=[ ("key", "val"), @@ -2833,8 +2761,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListSecurityPoliciesRequest +def test_get_rule_rest_bad_request( + transport: str = "rest", request_type=compute.GetRuleSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2842,7 +2770,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "security_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2854,10 +2782,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get_rule(request) -def test_list_rest_flattened(): +def test_get_rule_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2866,39 +2794,40 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPolicyList() + return_value = compute.SecurityPolicyRule() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "security_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + security_policy="security_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SecurityPolicyList.to_json(return_value) + json_return_value = compute.SecurityPolicyRule.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/getRule" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_rule_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2907,81 +2836,27 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListSecurityPoliciesRequest(), + client.get_rule( + compute.GetRuleSecurityPolicyRequest(), project="project_value", + security_policy="security_policy_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_rule_rest_error(): client = SecurityPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.SecurityPolicyList( - items=[ - compute.SecurityPolicy(), - compute.SecurityPolicy(), - compute.SecurityPolicy(), - ], - next_page_token="abc", - ), - compute.SecurityPolicyList( - items=[], - next_page_token="def", - ), - compute.SecurityPolicyList( - items=[ - compute.SecurityPolicy(), - ], - next_page_token="ghi", - ), - compute.SecurityPolicyList( - items=[ - compute.SecurityPolicy(), - compute.SecurityPolicy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.SecurityPolicyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.SecurityPolicy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest, + compute.InsertSecurityPolicyRequest, dict, ], ) -def test_list_preconfigured_expression_sets_rest(request_type): +def test_insert_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2989,34 +2864,140 @@ def test_list_preconfigured_expression_sets_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = ( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( - return_value - ) - ) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list_preconfigured_expression_sets(request) - - # Establish that the response is the type that we expect. - assert isinstance( - response, compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse - ) - - -def test_list_preconfigured_expression_sets_rest_required_fields( - request_type=compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest, -): + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertSecurityPolicyRequest): transport_class = transports.SecurityPoliciesRestTransport request_init = {} @@ -3032,7 +3013,7 @@ def test_list_preconfigured_expression_sets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_preconfigured_expression_sets._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3041,17 +3022,9 @@ def test_list_preconfigured_expression_sets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_preconfigured_expression_sets._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3065,7 +3038,7 @@ def test_list_preconfigured_expression_sets_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3076,52 +3049,44 @@ def test_list_preconfigured_expression_sets_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_preconfigured_expression_sets(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_preconfigured_expression_sets_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = ( - transport.list_preconfigured_expression_sets._get_unset_required_fields({}) - ) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "securityPolicyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_preconfigured_expression_sets_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3134,11 +3099,9 @@ def test_list_preconfigured_expression_sets_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, - "post_list_preconfigured_expression_sets", + transports.SecurityPoliciesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, - "pre_list_preconfigured_expression_sets", + transports.SecurityPoliciesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3153,23 +3116,17 @@ def test_list_preconfigured_expression_sets_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest() + request = compute.InsertSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = ( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse - ) + post.return_value = compute.Operation - client.list_preconfigured_expression_sets( + client.insert( request, metadata=[ ("key", "val"), @@ -3181,9 +3138,8 @@ def test_list_preconfigured_expression_sets_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_preconfigured_expression_sets_rest_bad_request( - transport: str = "rest", - request_type=compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest, +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3192,6 +3148,2467 @@ def test_list_preconfigured_expression_sets_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/securityPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertSecurityPolicyRequest(), + project="project_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + + +def test_insert_rest_error(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertSecurityPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertSecurityPolicyRequest, +): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "securityPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityPoliciesRestInterceptor(), + ) + client = SecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertSecurityPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSecurityPolicyRequest +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/securityPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertSecurityPolicyRequest(), + project="project_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + + +def test_insert_unary_rest_error(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListSecurityPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPolicyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SecurityPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + + +def test_list_rest_required_fields(request_type=compute.ListSecurityPoliciesRequest): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPolicyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SecurityPolicyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityPoliciesRestInterceptor(), + ) + client = SecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SecurityPolicyList.to_json( + compute.SecurityPolicyList() + ) + + request = compute.ListSecurityPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SecurityPolicyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListSecurityPoliciesRequest +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPolicyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SecurityPolicyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/securityPolicies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListSecurityPoliciesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.SecurityPolicyList( + items=[ + compute.SecurityPolicy(), + compute.SecurityPolicy(), + compute.SecurityPolicy(), + ], + next_page_token="abc", + ), + compute.SecurityPolicyList( + items=[], + next_page_token="def", + ), + compute.SecurityPolicyList( + items=[ + compute.SecurityPolicy(), + ], + next_page_token="ghi", + ), + compute.SecurityPolicyList( + items=[ + compute.SecurityPolicy(), + compute.SecurityPolicy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.SecurityPolicyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.SecurityPolicy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest, + dict, + ], +) +def test_list_preconfigured_expression_sets_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_preconfigured_expression_sets(request) + + # Establish that the response is the type that we expect. + assert isinstance( + response, compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse + ) + + +def test_list_preconfigured_expression_sets_rest_required_fields( + request_type=compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest, +): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_preconfigured_expression_sets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_preconfigured_expression_sets._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( + return_value + ) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_preconfigured_expression_sets(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_preconfigured_expression_sets_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = ( + transport.list_preconfigured_expression_sets._get_unset_required_fields({}) + ) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_preconfigured_expression_sets_rest_interceptors(null_interceptor): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityPoliciesRestInterceptor(), + ) + client = SecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, + "post_list_preconfigured_expression_sets", + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, + "pre_list_preconfigured_expression_sets", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() + ) + ) + + request = compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = ( + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse + ) + + client.list_preconfigured_expression_sets( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_preconfigured_expression_sets_rest_bad_request( + transport: str = "rest", + request_type=compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest, +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_preconfigured_expression_sets(request) + + +def test_list_preconfigured_expression_sets_rest_flattened(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( + return_value + ) + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_preconfigured_expression_sets(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/securityPolicies/listPreconfiguredExpressionSets" + % client.transport._host, + args[1], + ) + + +def test_list_preconfigured_expression_sets_rest_flattened_error( + transport: str = "rest", +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_preconfigured_expression_sets( + compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest(), + project="project_value", + ) + + +def test_list_preconfigured_expression_sets_rest_error(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchSecurityPolicyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchSecurityPolicyRequest): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["security_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["securityPolicy"] = "security_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" + + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "securityPolicy", + "securityPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityPoliciesRestInterceptor(), + ) + client = SecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchSecurityPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchSecurityPolicyRequest +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "security_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + security_policy="security_policy_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchSecurityPolicyRequest(), + project="project_value", + security_policy="security_policy_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + + +def test_patch_rest_error(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchSecurityPolicyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchSecurityPolicyRequest, +): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["security_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["securityPolicy"] = "security_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" + + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "securityPolicy", + "securityPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityPoliciesRestInterceptor(), + ) + client = SecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchSecurityPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchSecurityPolicyRequest +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_resource"] = { + "adaptive_protection_config": { + "layer7_ddos_defense_config": { + "enable": True, + "rule_visibility": "rule_visibility_value", + } + }, + "advanced_options_config": { + "json_parsing": "json_parsing_value", + "log_level": "log_level_value", + }, + "creation_timestamp": "creation_timestamp_value", + "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, + "region": "region_value", + "rules": [ + { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": [ + "src_ip_ranges_value_1", + "src_ip_ranges_value_2", + ] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + ], + "self_link": "self_link_value", + "type_": "type__value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "security_policy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + security_policy="security_policy_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchSecurityPolicyRequest(), + project="project_value", + security_policy="security_policy_value", + security_policy_resource=compute.SecurityPolicy( + adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( + layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( + enable=True + ) + ) + ), + ) + + +def test_patch_unary_rest_error(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRuleSecurityPolicyRequest, + dict, + ], +) +def test_patch_rule_rest(request_type): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_rule(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rule_rest_required_fields( + request_type=compute.PatchRuleSecurityPolicyRequest, +): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["security_policy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["securityPolicy"] = "security_policy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch_rule._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("priority",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "securityPolicy" in jsonified_request + assert jsonified_request["securityPolicy"] == "security_policy_value" + + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_rule(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rule_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch_rule._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("priority",)) + & set( + ( + "project", + "securityPolicy", + "securityPolicyRuleResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rule_rest_interceptors(null_interceptor): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityPoliciesRestInterceptor(), + ) + client = SecurityPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "post_patch_rule" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_patch_rule" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchRuleSecurityPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_rule( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rule_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRuleSecurityPolicyRequest +): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "security_policy": "sample2"} + request_init["security_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3203,10 +5620,10 @@ def test_list_preconfigured_expression_sets_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_preconfigured_expression_sets(request) + client.patch_rule(request) -def test_list_preconfigured_expression_sets_rest_flattened(): +def test_patch_rule_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3215,45 +5632,43 @@ def test_list_preconfigured_expression_sets_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "security_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + security_policy="security_policy_value", + security_policy_rule_resource=compute.SecurityPolicyRule( + action="action_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse.to_json( - return_value - ) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_preconfigured_expression_sets(**mock_args) + client.patch_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies/listPreconfiguredExpressionSets" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/patchRule" % client.transport._host, args[1], ) -def test_list_preconfigured_expression_sets_rest_flattened_error( - transport: str = "rest", -): +def test_patch_rule_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3262,13 +5677,17 @@ def test_list_preconfigured_expression_sets_rest_flattened_error( # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_preconfigured_expression_sets( - compute.ListPreconfiguredExpressionSetsSecurityPoliciesRequest(), + client.patch_rule( + compute.PatchRuleSecurityPolicyRequest(), project="project_value", + security_policy="security_policy_value", + security_policy_rule_resource=compute.SecurityPolicyRule( + action="action_value" + ), ) -def test_list_preconfigured_expression_sets_rest_error(): +def test_patch_rule_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3277,11 +5696,11 @@ def test_list_preconfigured_expression_sets_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchSecurityPolicyRequest, + compute.PatchRuleSecurityPolicyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_patch_rule_unary_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3289,74 +5708,46 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "security_policy": "sample2"} - request_init["security_policy_resource"] = { - "adaptive_protection_config": { - "layer7_ddos_defense_config": { - "enable": True, - "rule_visibility": "rule_visibility_value", - } - }, - "advanced_options_config": { - "json_parsing": "json_parsing_value", - "log_level": "log_level_value", - }, - "creation_timestamp": "creation_timestamp_value", - "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, + request_init["security_policy_rule_resource"] = { + "action": "action_value", "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] + }, "kind": "kind_value", - "name": "name_value", - "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, - "region": "region_value", - "rules": [ - { - "action": "action_value", + "match": { + "config": { + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] + }, + "expr": { "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": [ - "src_ip_ranges_value_1", - "src_ip_ranges_value_2", - ] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } - ], - "self_link": "self_link_value", - "type_": "type__value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, + }, + "redirect_options": {}, } request = request_type(request_init) @@ -3394,36 +5785,14 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.patch_rule_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchSecurityPolicyRequest, +def test_patch_rule_unary_rest_required_fields( + request_type=compute.PatchRuleSecurityPolicyRequest, ): transport_class = transports.SecurityPoliciesRestTransport @@ -3441,7 +5810,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).patch_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3451,9 +5820,9 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).patch_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("priority",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3480,7 +5849,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -3492,33 +5861,33 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.patch_rule_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_patch_rule_unary_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.patch_rule._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("priority",)) & set( ( "project", "securityPolicy", - "securityPolicyResource", + "securityPolicyRuleResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_patch_rule_unary_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3531,9 +5900,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_patch" + transports.SecurityPoliciesRestInterceptor, "post_patch_rule" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_patch" + transports.SecurityPoliciesRestInterceptor, "pre_patch_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3550,7 +5919,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchSecurityPolicyRequest() + request = compute.PatchRuleSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3558,7 +5927,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.patch_rule_unary( request, metadata=[ ("key", "val"), @@ -3570,8 +5939,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchSecurityPolicyRequest +def test_patch_rule_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchRuleSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3580,74 +5949,46 @@ def test_patch_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "security_policy": "sample2"} - request_init["security_policy_resource"] = { - "adaptive_protection_config": { - "layer7_ddos_defense_config": { - "enable": True, - "rule_visibility": "rule_visibility_value", - } + request_init["security_policy_rule_resource"] = { + "action": "action_value", + "description": "description_value", + "header_action": { + "request_headers_to_adds": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + } + ] }, - "advanced_options_config": { - "json_parsing": "json_parsing_value", - "log_level": "log_level_value", + "kind": "kind_value", + "match": { + "config": { + "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] + }, + "expr": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "versioned_expr": "versioned_expr_value", + }, + "preview": True, + "priority": 898, + "rate_limit_options": { + "ban_duration_sec": 1680, + "ban_threshold": {"count": 553, "interval_sec": 1279}, + "conform_action": "conform_action_value", + "enforce_on_key": "enforce_on_key_value", + "enforce_on_key_name": "enforce_on_key_name_value", + "exceed_action": "exceed_action_value", + "exceed_redirect_options": { + "target": "target_value", + "type_": "type__value", + }, + "rate_limit_threshold": {}, }, - "creation_timestamp": "creation_timestamp_value", - "ddos_protection_config": {"ddos_protection": "ddos_protection_value"}, - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "recaptcha_options_config": {"redirect_site_key": "redirect_site_key_value"}, - "region": "region_value", - "rules": [ - { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": [ - "src_ip_ranges_value_1", - "src_ip_ranges_value_2", - ] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } - ], - "self_link": "self_link_value", - "type_": "type__value", + "redirect_options": {}, } request = request_type(request_init) @@ -3660,10 +6001,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.patch_rule_unary(request) -def test_patch_unary_rest_flattened(): +def test_patch_rule_unary_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3681,12 +6022,8 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", security_policy="security_policy_value", - security_policy_resource=compute.SecurityPolicy( - adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( - layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( - enable=True - ) - ) + security_policy_rule_resource=compute.SecurityPolicyRule( + action="action_value" ), ) mock_args.update(sample_request) @@ -3699,20 +6036,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.patch_rule_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/patchRule" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3721,21 +6058,17 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchSecurityPolicyRequest(), + client.patch_rule_unary( + compute.PatchRuleSecurityPolicyRequest(), project="project_value", security_policy="security_policy_value", - security_policy_resource=compute.SecurityPolicy( - adaptive_protection_config=compute.SecurityPolicyAdaptiveProtectionConfig( - layer7_ddos_defense_config=compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig( - enable=True - ) - ) + security_policy_rule_resource=compute.SecurityPolicyRule( + action="action_value" ), ) -def test_patch_unary_rest_error(): +def test_patch_rule_unary_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3744,11 +6077,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.PatchRuleSecurityPolicyRequest, + compute.RemoveRuleSecurityPolicyRequest, dict, ], ) -def test_patch_rule_unary_rest(request_type): +def test_remove_rule_rest(request_type): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3756,47 +6089,6 @@ def test_patch_rule_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "security_policy": "sample2"} - request_init["security_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3833,10 +6125,10 @@ def test_patch_rule_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_rule(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3861,8 +6153,8 @@ def test_patch_rule_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_rule_unary_rest_required_fields( - request_type=compute.PatchRuleSecurityPolicyRequest, +def test_remove_rule_rest_required_fields( + request_type=compute.RemoveRuleSecurityPolicyRequest, ): transport_class = transports.SecurityPoliciesRestTransport @@ -3880,7 +6172,7 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3890,7 +6182,7 @@ def test_patch_rule_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch_rule._get_unset_required_fields(jsonified_request) + ).remove_rule._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("priority",)) jsonified_request.update(unset_fields) @@ -3922,7 +6214,6 @@ def test_patch_rule_unary_rest_required_fields( "method": "post", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -3931,33 +6222,32 @@ def test_patch_rule_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_rule_unary(request) + response = client.remove_rule(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_rule_unary_rest_unset_required_fields(): +def test_remove_rule_rest_unset_required_fields(): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch_rule._get_unset_required_fields({}) + unset_fields = transport.remove_rule._get_unset_required_fields({}) assert set(unset_fields) == ( set(("priority",)) & set( ( "project", "securityPolicy", - "securityPolicyRuleResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_rule_unary_rest_interceptors(null_interceptor): +def test_remove_rule_rest_interceptors(null_interceptor): transport = transports.SecurityPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3970,9 +6260,9 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "post_patch_rule" + transports.SecurityPoliciesRestInterceptor, "post_remove_rule" ) as post, mock.patch.object( - transports.SecurityPoliciesRestInterceptor, "pre_patch_rule" + transports.SecurityPoliciesRestInterceptor, "pre_remove_rule" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3989,7 +6279,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchRuleSecurityPolicyRequest() + request = compute.RemoveRuleSecurityPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3997,7 +6287,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_rule_unary( + client.remove_rule( request, metadata=[ ("key", "val"), @@ -4009,8 +6299,8 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_rule_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchRuleSecurityPolicyRequest +def test_remove_rule_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveRuleSecurityPolicyRequest ): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4019,47 +6309,6 @@ def test_patch_rule_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "security_policy": "sample2"} - request_init["security_policy_rule_resource"] = { - "action": "action_value", - "description": "description_value", - "header_action": { - "request_headers_to_adds": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - } - ] - }, - "kind": "kind_value", - "match": { - "config": { - "src_ip_ranges": ["src_ip_ranges_value_1", "src_ip_ranges_value_2"] - }, - "expr": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "versioned_expr": "versioned_expr_value", - }, - "preview": True, - "priority": 898, - "rate_limit_options": { - "ban_duration_sec": 1680, - "ban_threshold": {"count": 553, "interval_sec": 1279}, - "conform_action": "conform_action_value", - "enforce_on_key": "enforce_on_key_value", - "enforce_on_key_name": "enforce_on_key_name_value", - "exceed_action": "exceed_action_value", - "exceed_redirect_options": { - "target": "target_value", - "type_": "type__value", - }, - "rate_limit_threshold": {}, - }, - "redirect_options": {}, - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4071,10 +6320,10 @@ def test_patch_rule_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_rule_unary(request) + client.remove_rule(request) -def test_patch_rule_unary_rest_flattened(): +def test_remove_rule_rest_flattened(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4092,9 +6341,6 @@ def test_patch_rule_unary_rest_flattened(): mock_args = dict( project="project_value", security_policy="security_policy_value", - security_policy_rule_resource=compute.SecurityPolicyRule( - action="action_value" - ), ) mock_args.update(sample_request) @@ -4106,20 +6352,20 @@ def test_patch_rule_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_rule_unary(**mock_args) + client.remove_rule(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/patchRule" + "%s/compute/v1/projects/{project}/global/securityPolicies/{security_policy}/removeRule" % client.transport._host, args[1], ) -def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_rule_rest_flattened_error(transport: str = "rest"): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4128,17 +6374,14 @@ def test_patch_rule_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_rule_unary( - compute.PatchRuleSecurityPolicyRequest(), + client.remove_rule( + compute.RemoveRuleSecurityPolicyRequest(), project="project_value", security_policy="security_policy_value", - security_policy_rule_resource=compute.SecurityPolicyRule( - action="action_value" - ), ) -def test_patch_rule_unary_rest_error(): +def test_remove_rule_rest_error(): client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4199,28 +6442,6 @@ def test_remove_rule_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_remove_rule_unary_rest_required_fields( @@ -4532,6 +6753,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = SecurityPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_security_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4573,6 +6807,14 @@ def test_security_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_security_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_service_attachments.py b/tests/unit/gapic/compute_v1/test_service_attachments.py index b41fd860b..6a605b46f 100644 --- a/tests/unit/gapic/compute_v1/test_service_attachments.py +++ b/tests/unit/gapic/compute_v1/test_service_attachments.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -911,7 +913,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -959,10 +961,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -987,7 +989,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteServiceAttachmentRequest, ): transport_class = transports.ServiceAttachmentsRestTransport @@ -1060,14 +1062,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1086,7 +1088,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1126,7 +1128,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1138,7 +1140,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteServiceAttachmentRequest ): client = ServiceAttachmentsClient( @@ -1163,10 +1165,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1200,7 +1202,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1213,7 +1215,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1222,7 +1224,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteServiceAttachmentRequest(), project="project_value", region="region_value", @@ -1230,7 +1232,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1239,11 +1241,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetServiceAttachmentRequest, + compute.DeleteServiceAttachmentRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1260,52 +1262,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ServiceAttachment( - connection_preference="connection_preference_value", - consumer_reject_lists=["consumer_reject_lists_value"], + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - domain_names=["domain_names_value"], - enable_proxy_protocol=True, - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - nat_subnets=["nat_subnets_value"], - producer_forwarding_rule="producer_forwarding_rule_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - target_service="target_service_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ServiceAttachment.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.ServiceAttachment) - assert response.connection_preference == "connection_preference_value" - assert response.consumer_reject_lists == ["consumer_reject_lists_value"] - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.domain_names == ["domain_names_value"] - assert response.enable_proxy_protocol is True - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.nat_subnets == ["nat_subnets_value"] - assert response.producer_forwarding_rule == "producer_forwarding_rule_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.target_service == "target_service_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetServiceAttachmentRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteServiceAttachmentRequest, +): transport_class = transports.ServiceAttachmentsRestTransport request_init = {} @@ -1323,7 +1319,7 @@ def test_get_rest_required_fields(request_type=compute.GetServiceAttachmentReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1334,7 +1330,9 @@ def test_get_rest_required_fields(request_type=compute.GetServiceAttachmentReque unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1352,7 +1350,7 @@ def test_get_rest_required_fields(request_type=compute.GetServiceAttachmentReque request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ServiceAttachment() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1363,32 +1361,32 @@ def test_get_rest_required_fields(request_type=compute.GetServiceAttachmentReque # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ServiceAttachment.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1400,7 +1398,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1413,9 +1411,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "post_get" + transports.ServiceAttachmentsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "pre_get" + transports.ServiceAttachmentsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1430,19 +1428,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ServiceAttachment.to_json( - compute.ServiceAttachment() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetServiceAttachmentRequest() + request = compute.DeleteServiceAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ServiceAttachment + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1454,8 +1450,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetServiceAttachmentRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteServiceAttachmentRequest ): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1479,10 +1475,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1491,7 +1487,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ServiceAttachment() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1511,12 +1507,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ServiceAttachment.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1529,7 +1525,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1538,15 +1534,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetServiceAttachmentRequest(), + client.delete_unary( + compute.DeleteServiceAttachmentRequest(), project="project_value", region="region_value", service_attachment="service_attachment_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1555,53 +1551,79 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicyServiceAttachmentRequest, + compute.GetServiceAttachmentRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = { + "project": "sample1", + "region": "sample2", + "service_attachment": "sample3", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.ServiceAttachment( + connection_preference="connection_preference_value", + consumer_reject_lists=["consumer_reject_lists_value"], + creation_timestamp="creation_timestamp_value", + description="description_value", + domain_names=["domain_names_value"], + enable_proxy_protocol=True, + fingerprint="fingerprint_value", + id=205, + kind="kind_value", + name="name_value", + nat_subnets=["nat_subnets_value"], + producer_forwarding_rule="producer_forwarding_rule_value", + region="region_value", + self_link="self_link_value", + target_service="target_service_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.ServiceAttachment.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.ServiceAttachment) + assert response.connection_preference == "connection_preference_value" + assert response.consumer_reject_lists == ["consumer_reject_lists_value"] + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.domain_names == ["domain_names_value"] + assert response.enable_proxy_protocol is True + assert response.fingerprint == "fingerprint_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.nat_subnets == ["nat_subnets_value"] + assert response.producer_forwarding_rule == "producer_forwarding_rule_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.target_service == "target_service_value" -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicyServiceAttachmentRequest, -): +def test_get_rest_required_fields(request_type=compute.GetServiceAttachmentRequest): transport_class = transports.ServiceAttachmentsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" + request_init["service_attachment"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1613,20 +1635,18 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" + jsonified_request["serviceAttachment"] = "service_attachment_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1634,8 +1654,8 @@ def test_get_iam_policy_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "serviceAttachment" in jsonified_request + assert jsonified_request["serviceAttachment"] == "service_attachment_value" client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1644,7 +1664,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.ServiceAttachment() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1662,37 +1682,37 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.ServiceAttachment.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(()) & set( ( "project", "region", - "resource", + "serviceAttachment", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1705,9 +1725,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "post_get_iam_policy" + transports.ServiceAttachmentsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "pre_get_iam_policy" + transports.ServiceAttachmentsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1722,17 +1742,19 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.ServiceAttachment.to_json( + compute.ServiceAttachment() + ) - request = compute.GetIamPolicyServiceAttachmentRequest() + request = compute.GetServiceAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.ServiceAttachment - client.get_iam_policy( + client.get( request, metadata=[ ("key", "val"), @@ -1744,8 +1766,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicyServiceAttachmentRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetServiceAttachmentRequest ): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1753,7 +1775,11 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = { + "project": "sample1", + "region": "sample2", + "service_attachment": "sample3", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1765,10 +1791,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.get(request) -def test_get_iam_policy_rest_flattened(): +def test_get_rest_flattened(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1777,45 +1803,45 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.ServiceAttachment() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "region": "sample2", - "resource": "sample3", + "service_attachment": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", + service_attachment="service_attachment_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.ServiceAttachment.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments/{service_attachment}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1824,15 +1850,15 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicyServiceAttachmentRequest(), + client.get( + compute.GetServiceAttachmentRequest(), project="project_value", region="region_value", - resource="resource_value", + service_attachment="service_attachment_value", ) -def test_get_iam_policy_rest_error(): +def test_get_rest_error(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1841,121 +1867,53 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertServiceAttachmentRequest, + compute.GetIamPolicyServiceAttachmentRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_iam_policy_rest(request_type): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["service_attachment_resource"] = { - "connected_endpoints": [ - { - "endpoint": "endpoint_value", - "psc_connection_id": 1793, - "status": "status_value", - } - ], - "connection_preference": "connection_preference_value", - "consumer_accept_lists": [ - {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} - ], - "consumer_reject_lists": [ - "consumer_reject_lists_value_1", - "consumer_reject_lists_value_2", - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "domain_names": ["domain_names_value_1", "domain_names_value_2"], - "enable_proxy_protocol": True, - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], - "producer_forwarding_rule": "producer_forwarding_rule_value", - "psc_service_attachment_id": {"high": 416, "low": 338}, - "region": "region_value", - "self_link": "self_link_value", - "target_service": "target_service_value", - } + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_insert_unary_rest_required_fields( - request_type=compute.InsertServiceAttachmentRequest, +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicyServiceAttachmentRequest, ): transport_class = transports.ServiceAttachmentsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1967,19 +1925,20 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1987,6 +1946,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1995,7 +1956,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2006,45 +1967,44 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("optionsRequestedPolicyVersion",)) & set( ( "project", "region", - "serviceAttachmentResource", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2057,9 +2017,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "post_insert" + transports.ServiceAttachmentsRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "pre_insert" + transports.ServiceAttachmentsRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2074,17 +2034,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.InsertServiceAttachmentRequest() + request = compute.GetIamPolicyServiceAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Policy - client.insert_unary( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -2096,8 +2056,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertServiceAttachmentRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicyServiceAttachmentRequest ): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2105,38 +2065,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["service_attachment_resource"] = { - "connected_endpoints": [ - { - "endpoint": "endpoint_value", - "psc_connection_id": 1793, - "status": "status_value", - } - ], - "connection_preference": "connection_preference_value", - "consumer_accept_lists": [ - {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} - ], - "consumer_reject_lists": [ - "consumer_reject_lists_value_1", - "consumer_reject_lists_value_2", - ], - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "domain_names": ["domain_names_value_1", "domain_names_value_2"], - "enable_proxy_protocol": True, - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], - "producer_forwarding_rule": "producer_forwarding_rule_value", - "psc_service_attachment_id": {"high": 416, "low": 338}, - "region": "region_value", - "self_link": "self_link_value", - "target_service": "target_service_value", - } + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2148,10 +2077,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get_iam_policy(request) -def test_insert_unary_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2160,47 +2089,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - service_attachment_resource=compute.ServiceAttachment( - connected_endpoints=[ - compute.ServiceAttachmentConnectedEndpoint( - endpoint="endpoint_value" - ) - ] - ), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments" + "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2209,21 +2136,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertServiceAttachmentRequest(), + client.get_iam_policy( + compute.GetIamPolicyServiceAttachmentRequest(), project="project_value", region="region_value", - service_attachment_resource=compute.ServiceAttachment( - connected_endpoints=[ - compute.ServiceAttachmentConnectedEndpoint( - endpoint="endpoint_value" - ) - ] - ), + resource="resource_value", ) -def test_insert_unary_rest_error(): +def test_get_iam_policy_rest_error(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2232,11 +2153,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListServiceAttachmentsRequest, + compute.InsertServiceAttachmentRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2244,40 +2165,1220 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.ServiceAttachmentList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", + request_init["service_attachment_resource"] = { + "connected_endpoints": [ + { + "endpoint": "endpoint_value", + "psc_connection_id": 1793, + "status": "status_value", + } + ], + "connection_preference": "connection_preference_value", + "consumer_accept_lists": [ + {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} + ], + "consumer_reject_lists": [ + "consumer_reject_lists_value_1", + "consumer_reject_lists_value_2", + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "domain_names": ["domain_names_value_1", "domain_names_value_2"], + "enable_proxy_protocol": True, + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], + "producer_forwarding_rule": "producer_forwarding_rule_value", + "psc_service_attachment_id": {"high": 416, "low": 338}, + "region": "region_value", + "self_link": "self_link_value", + "target_service": "target_service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertServiceAttachmentRequest, +): + transport_class = transports.ServiceAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.ServiceAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "serviceAttachmentResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.ServiceAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ServiceAttachmentsRestInterceptor(), + ) + client = ServiceAttachmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ServiceAttachmentsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ServiceAttachmentsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertServiceAttachmentRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertServiceAttachmentRequest +): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["service_attachment_resource"] = { + "connected_endpoints": [ + { + "endpoint": "endpoint_value", + "psc_connection_id": 1793, + "status": "status_value", + } + ], + "connection_preference": "connection_preference_value", + "consumer_accept_lists": [ + {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} + ], + "consumer_reject_lists": [ + "consumer_reject_lists_value_1", + "consumer_reject_lists_value_2", + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "domain_names": ["domain_names_value_1", "domain_names_value_2"], + "enable_proxy_protocol": True, + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], + "producer_forwarding_rule": "producer_forwarding_rule_value", + "psc_service_attachment_id": {"high": 416, "low": 338}, + "region": "region_value", + "self_link": "self_link_value", + "target_service": "target_service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + service_attachment_resource=compute.ServiceAttachment( + connected_endpoints=[ + compute.ServiceAttachmentConnectedEndpoint( + endpoint="endpoint_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertServiceAttachmentRequest(), + project="project_value", + region="region_value", + service_attachment_resource=compute.ServiceAttachment( + connected_endpoints=[ + compute.ServiceAttachmentConnectedEndpoint( + endpoint="endpoint_value" + ) + ] + ), + ) + + +def test_insert_rest_error(): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertServiceAttachmentRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["service_attachment_resource"] = { + "connected_endpoints": [ + { + "endpoint": "endpoint_value", + "psc_connection_id": 1793, + "status": "status_value", + } + ], + "connection_preference": "connection_preference_value", + "consumer_accept_lists": [ + {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} + ], + "consumer_reject_lists": [ + "consumer_reject_lists_value_1", + "consumer_reject_lists_value_2", + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "domain_names": ["domain_names_value_1", "domain_names_value_2"], + "enable_proxy_protocol": True, + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], + "producer_forwarding_rule": "producer_forwarding_rule_value", + "psc_service_attachment_id": {"high": 416, "low": 338}, + "region": "region_value", + "self_link": "self_link_value", + "target_service": "target_service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertServiceAttachmentRequest, +): + transport_class = transports.ServiceAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.ServiceAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "serviceAttachmentResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.ServiceAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ServiceAttachmentsRestInterceptor(), + ) + client = ServiceAttachmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ServiceAttachmentsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.ServiceAttachmentsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertServiceAttachmentRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertServiceAttachmentRequest +): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["service_attachment_resource"] = { + "connected_endpoints": [ + { + "endpoint": "endpoint_value", + "psc_connection_id": 1793, + "status": "status_value", + } + ], + "connection_preference": "connection_preference_value", + "consumer_accept_lists": [ + {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} + ], + "consumer_reject_lists": [ + "consumer_reject_lists_value_1", + "consumer_reject_lists_value_2", + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "domain_names": ["domain_names_value_1", "domain_names_value_2"], + "enable_proxy_protocol": True, + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], + "producer_forwarding_rule": "producer_forwarding_rule_value", + "psc_service_attachment_id": {"high": 416, "low": 338}, + "region": "region_value", + "self_link": "self_link_value", + "target_service": "target_service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + service_attachment_resource=compute.ServiceAttachment( + connected_endpoints=[ + compute.ServiceAttachmentConnectedEndpoint( + endpoint="endpoint_value" + ) + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertServiceAttachmentRequest(), + project="project_value", + region="region_value", + service_attachment_resource=compute.ServiceAttachment( + connected_endpoints=[ + compute.ServiceAttachmentConnectedEndpoint( + endpoint="endpoint_value" + ) + ] + ), + ) + + +def test_insert_unary_rest_error(): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListServiceAttachmentsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ServiceAttachmentList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ServiceAttachmentList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListServiceAttachmentsRequest): + transport_class = transports.ServiceAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.ServiceAttachmentList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ServiceAttachmentList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.ServiceAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.ServiceAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.ServiceAttachmentsRestInterceptor(), + ) + client = ServiceAttachmentsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.ServiceAttachmentsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.ServiceAttachmentsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.ServiceAttachmentList.to_json( + compute.ServiceAttachmentList() + ) + + request = compute.ListServiceAttachmentsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.ServiceAttachmentList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListServiceAttachmentsRequest +): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.ServiceAttachmentList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.ServiceAttachmentList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListServiceAttachmentsRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.ServiceAttachmentList( + items=[ + compute.ServiceAttachment(), + compute.ServiceAttachment(), + compute.ServiceAttachment(), + ], + next_page_token="abc", + ), + compute.ServiceAttachmentList( + items=[], + next_page_token="def", + ), + compute.ServiceAttachmentList( + items=[ + compute.ServiceAttachment(), + ], + next_page_token="ghi", + ), + compute.ServiceAttachmentList( + items=[ + compute.ServiceAttachment(), + compute.ServiceAttachment(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.ServiceAttachmentList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.ServiceAttachment) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchServiceAttachmentRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = ServiceAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "service_attachment": "sample3", + } + request_init["service_attachment_resource"] = { + "connected_endpoints": [ + { + "endpoint": "endpoint_value", + "psc_connection_id": 1793, + "status": "status_value", + } + ], + "connection_preference": "connection_preference_value", + "consumer_accept_lists": [ + {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} + ], + "consumer_reject_lists": [ + "consumer_reject_lists_value_1", + "consumer_reject_lists_value_2", + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "domain_names": ["domain_names_value_1", "domain_names_value_2"], + "enable_proxy_protocol": True, + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], + "producer_forwarding_rule": "producer_forwarding_rule_value", + "psc_service_attachment_id": {"high": 416, "low": 338}, + "region": "region_value", + "self_link": "self_link_value", + "target_service": "target_service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ServiceAttachmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListServiceAttachmentsRequest): +def test_patch_rest_required_fields(request_type=compute.PatchServiceAttachmentRequest): transport_class = transports.ServiceAttachmentsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["service_attachment"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2289,27 +3390,20 @@ def test_list_rest_required_fields(request_type=compute.ListServiceAttachmentsRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["serviceAttachment"] = "service_attachment_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2317,6 +3411,8 @@ def test_list_rest_required_fields(request_type=compute.ListServiceAttachmentsRe assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "serviceAttachment" in jsonified_request + assert jsonified_request["serviceAttachment"] == "service_attachment_value" client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2325,7 +3421,7 @@ def test_list_rest_required_fields(request_type=compute.ListServiceAttachmentsRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.ServiceAttachmentList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2336,51 +3432,46 @@ def test_list_rest_required_fields(request_type=compute.ListServiceAttachmentsRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.ServiceAttachmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "serviceAttachment", + "serviceAttachmentResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.ServiceAttachmentsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2393,9 +3484,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "post_list" + transports.ServiceAttachmentsRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.ServiceAttachmentsRestInterceptor, "pre_list" + transports.ServiceAttachmentsRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2410,19 +3501,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.ServiceAttachmentList.to_json( - compute.ServiceAttachmentList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListServiceAttachmentsRequest() + request = compute.PatchServiceAttachmentRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ServiceAttachmentList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -2434,8 +3523,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListServiceAttachmentsRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchServiceAttachmentRequest ): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2443,7 +3532,42 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = { + "project": "sample1", + "region": "sample2", + "service_attachment": "sample3", + } + request_init["service_attachment_resource"] = { + "connected_endpoints": [ + { + "endpoint": "endpoint_value", + "psc_connection_id": 1793, + "status": "status_value", + } + ], + "connection_preference": "connection_preference_value", + "consumer_accept_lists": [ + {"connection_limit": 1710, "project_id_or_num": "project_id_or_num_value"} + ], + "consumer_reject_lists": [ + "consumer_reject_lists_value_1", + "consumer_reject_lists_value_2", + ], + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "domain_names": ["domain_names_value_1", "domain_names_value_2"], + "enable_proxy_protocol": True, + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "nat_subnets": ["nat_subnets_value_1", "nat_subnets_value_2"], + "producer_forwarding_rule": "producer_forwarding_rule_value", + "psc_service_attachment_id": {"high": 416, "low": 338}, + "region": "region_value", + "self_link": "self_link_value", + "target_service": "target_service_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2455,10 +3579,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2467,40 +3591,52 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.ServiceAttachmentList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "service_attachment": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + service_attachment="service_attachment_value", + service_attachment_resource=compute.ServiceAttachment( + connected_endpoints=[ + compute.ServiceAttachmentConnectedEndpoint( + endpoint="endpoint_value" + ) + ] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.ServiceAttachmentList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments" + "%s/compute/v1/projects/{project}/regions/{region}/serviceAttachments/{service_attachment}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = ServiceAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2509,73 +3645,26 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListServiceAttachmentsRequest(), + client.patch( + compute.PatchServiceAttachmentRequest(), project="project_value", region="region_value", + service_attachment="service_attachment_value", + service_attachment_resource=compute.ServiceAttachment( + connected_endpoints=[ + compute.ServiceAttachmentConnectedEndpoint( + endpoint="endpoint_value" + ) + ] + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = ServiceAttachmentsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.ServiceAttachmentList( - items=[ - compute.ServiceAttachment(), - compute.ServiceAttachment(), - compute.ServiceAttachment(), - ], - next_page_token="abc", - ), - compute.ServiceAttachmentList( - items=[], - next_page_token="def", - ), - compute.ServiceAttachmentList( - items=[ - compute.ServiceAttachment(), - ], - next_page_token="ghi", - ), - compute.ServiceAttachmentList( - items=[ - compute.ServiceAttachment(), - compute.ServiceAttachment(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.ServiceAttachmentList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.ServiceAttachment) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2667,28 +3756,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -3805,6 +4872,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ServiceAttachmentsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_service_attachments_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3844,6 +4924,14 @@ def test_service_attachments_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_service_attachments_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_snapshots.py b/tests/unit/gapic/compute_v1/test_snapshots.py index 4a3ee719d..023e15734 100644 --- a/tests/unit/gapic/compute_v1/test_snapshots.py +++ b/tests/unit/gapic/compute_v1/test_snapshots.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -512,7 +514,7 @@ def test_snapshots_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -556,10 +558,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -584,7 +586,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteSnapshotRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteSnapshotRequest): transport_class = transports.SnapshotsRestTransport request_init = {} @@ -651,14 +653,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteSnapshotRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -676,7 +678,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), @@ -714,7 +716,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -726,7 +728,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteSnapshotRequest ): client = SnapshotsClient( @@ -747,10 +749,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -779,7 +781,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -792,7 +794,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -801,14 +803,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteSnapshotRequest(), project="project_value", snapshot="snapshot_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -817,11 +819,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetSnapshotRequest, + compute.DeleteSnapshotRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -834,64 +836,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Snapshot( - auto_created=True, - chain_name="chain_name_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - disk_size_gb=1261, - download_bytes=1502, + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", - license_codes=[1360], - licenses=["licenses_value"], - location_hint="location_hint_value", name="name_value", - satisfies_pzs=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - source_disk="source_disk_value", - source_disk_id="source_disk_id_value", - status="status_value", - storage_bytes=1403, - storage_bytes_status="storage_bytes_status_value", - storage_locations=["storage_locations_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Snapshot.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Snapshot) - assert response.auto_created is True - assert response.chain_name == "chain_name_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.disk_size_gb == 1261 - assert response.download_bytes == 1502 - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.license_codes == [1360] - assert response.licenses == ["licenses_value"] - assert response.location_hint == "location_hint_value" - assert response.name == "name_value" - assert response.satisfies_pzs is True - assert response.self_link == "self_link_value" - assert response.source_disk == "source_disk_value" - assert response.source_disk_id == "source_disk_id_value" - assert response.status == "status_value" - assert response.storage_bytes == 1403 - assert response.storage_bytes_status == "storage_bytes_status_value" - assert response.storage_locations == ["storage_locations_value"] + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetSnapshotRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteSnapshotRequest): transport_class = transports.SnapshotsRestTransport request_init = {} @@ -908,7 +890,7 @@ def test_get_rest_required_fields(request_type=compute.GetSnapshotRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -918,7 +900,9 @@ def test_get_rest_required_fields(request_type=compute.GetSnapshotRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -934,7 +918,7 @@ def test_get_rest_required_fields(request_type=compute.GetSnapshotRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Snapshot() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -945,32 +929,32 @@ def test_get_rest_required_fields(request_type=compute.GetSnapshotRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Snapshot.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -981,7 +965,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), @@ -992,9 +976,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SnapshotsRestInterceptor, "post_get" + transports.SnapshotsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.SnapshotsRestInterceptor, "pre_get" + transports.SnapshotsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1009,17 +993,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Snapshot.to_json(compute.Snapshot()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetSnapshotRequest() + request = compute.DeleteSnapshotRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Snapshot + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1031,8 +1015,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetSnapshotRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSnapshotRequest ): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1052,10 +1036,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1064,7 +1048,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Snapshot() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "snapshot": "sample2"} @@ -1079,12 +1063,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Snapshot.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1097,7 +1081,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1106,14 +1090,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetSnapshotRequest(), + client.delete_unary( + compute.DeleteSnapshotRequest(), project="project_value", snapshot="snapshot_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1122,52 +1106,86 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicySnapshotRequest, + compute.GetSnapshotRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_rest(request_type): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "snapshot": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Snapshot( + auto_created=True, + chain_name="chain_name_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + disk_size_gb=1261, + download_bytes=1502, + id=205, + kind="kind_value", + label_fingerprint="label_fingerprint_value", + license_codes=[1360], + licenses=["licenses_value"], + location_hint="location_hint_value", + name="name_value", + satisfies_pzs=True, + self_link="self_link_value", + source_disk="source_disk_value", + source_disk_id="source_disk_id_value", + status="status_value", + storage_bytes=1403, + storage_bytes_status="storage_bytes_status_value", + storage_locations=["storage_locations_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Snapshot.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.Snapshot) + assert response.auto_created is True + assert response.chain_name == "chain_name_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.disk_size_gb == 1261 + assert response.download_bytes == 1502 + assert response.id == 205 + assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.license_codes == [1360] + assert response.licenses == ["licenses_value"] + assert response.location_hint == "location_hint_value" + assert response.name == "name_value" + assert response.satisfies_pzs is True + assert response.self_link == "self_link_value" + assert response.source_disk == "source_disk_value" + assert response.source_disk_id == "source_disk_id_value" + assert response.status == "status_value" + assert response.storage_bytes == 1403 + assert response.storage_bytes_status == "storage_bytes_status_value" + assert response.storage_locations == ["storage_locations_value"] -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicySnapshotRequest, -): +def test_get_rest_required_fields(request_type=compute.GetSnapshotRequest): transport_class = transports.SnapshotsRestTransport request_init = {} request_init["project"] = "" - request_init["resource"] = "" + request_init["snapshot"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1179,26 +1197,24 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["resource"] = "resource_value" + jsonified_request["snapshot"] = "snapshot_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "snapshot" in jsonified_request + assert jsonified_request["snapshot"] == "snapshot_value" client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1207,7 +1223,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Snapshot() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1225,36 +1241,36 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Snapshot.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(()) & set( ( "project", - "resource", + "snapshot", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), @@ -1265,9 +1281,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SnapshotsRestInterceptor, "post_get_iam_policy" + transports.SnapshotsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.SnapshotsRestInterceptor, "pre_get_iam_policy" + transports.SnapshotsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1282,17 +1298,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Snapshot.to_json(compute.Snapshot()) - request = compute.GetIamPolicySnapshotRequest() + request = compute.GetSnapshotRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Snapshot - client.get_iam_policy( + client.get( request, metadata=[ ("key", "val"), @@ -1304,8 +1320,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicySnapshotRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetSnapshotRequest ): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1313,7 +1329,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} + request_init = {"project": "sample1", "snapshot": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1325,10 +1341,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.get(request) -def test_get_iam_policy_rest_flattened(): +def test_get_rest_flattened(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1337,40 +1353,40 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Snapshot() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "resource": "sample2"} + sample_request = {"project": "sample1", "snapshot": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - resource="resource_value", + snapshot="snapshot_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Snapshot.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/snapshots/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/global/snapshots/{snapshot}" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1379,14 +1395,14 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicySnapshotRequest(), + client.get( + compute.GetSnapshotRequest(), project="project_value", - resource="resource_value", + snapshot="snapshot_value", ) -def test_get_iam_policy_rest_error(): +def test_get_rest_error(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1395,119 +1411,52 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertSnapshotRequest, + compute.GetIamPolicySnapshotRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_iam_policy_rest(request_type): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["snapshot_resource"] = { - "auto_created": True, - "chain_name": "chain_name_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_size_gb": 1261, - "download_bytes": 1502, - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "snapshot_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "status": "status_value", - "storage_bytes": 1403, - "storage_bytes_status": "storage_bytes_status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], - } + request_init = {"project": "sample1", "resource": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_insert_unary_rest_required_fields(request_type=compute.InsertSnapshotRequest): +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicySnapshotRequest, +): transport_class = transports.SnapshotsRestTransport request_init = {} request_init["project"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1519,23 +1468,26 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertSnapshotRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1544,7 +1496,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertSnapshotRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1555,44 +1507,43 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertSnapshotRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(("optionsRequestedPolicyVersion",)) & set( ( "project", - "snapshotResource", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), @@ -1603,9 +1554,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SnapshotsRestInterceptor, "post_insert" + transports.SnapshotsRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.SnapshotsRestInterceptor, "pre_insert" + transports.SnapshotsRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1620,17 +1571,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.InsertSnapshotRequest() + request = compute.GetIamPolicySnapshotRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Policy - client.insert_unary( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -1642,8 +1593,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertSnapshotRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicySnapshotRequest ): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1651,39 +1602,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["snapshot_resource"] = { - "auto_created": True, - "chain_name": "chain_name_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "disk_size_gb": 1261, - "download_bytes": 1502, - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "license_codes": [1361, 1362], - "licenses": ["licenses_value_1", "licenses_value_2"], - "location_hint": "location_hint_value", - "name": "name_value", - "satisfies_pzs": True, - "self_link": "self_link_value", - "snapshot_encryption_key": { - "kms_key_name": "kms_key_name_value", - "kms_key_service_account": "kms_key_service_account_value", - "raw_key": "raw_key_value", - "rsa_encrypted_key": "rsa_encrypted_key_value", - "sha256": "sha256_value", - }, - "source_disk": "source_disk_value", - "source_disk_encryption_key": {}, - "source_disk_id": "source_disk_id_value", - "status": "status_value", - "storage_bytes": 1403, - "storage_bytes_status": "storage_bytes_status_value", - "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], - } + request_init = {"project": "sample1", "resource": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1695,10 +1614,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get_iam_policy(request) -def test_insert_unary_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1707,40 +1626,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "resource": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - snapshot_resource=compute.Snapshot(auto_created=True), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/snapshots" + "%s/compute/v1/projects/{project}/global/snapshots/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1749,14 +1668,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertSnapshotRequest(), + client.get_iam_policy( + compute.GetIamPolicySnapshotRequest(), project="project_value", - snapshot_resource=compute.Snapshot(auto_created=True), + resource="resource_value", ) -def test_insert_unary_rest_error(): +def test_get_iam_policy_rest_error(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1765,11 +1684,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListSnapshotsRequest, + compute.InsertSnapshotRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1777,35 +1696,103 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.SnapshotList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.SnapshotList.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" - + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) -def test_list_rest_required_fields(request_type=compute.ListSnapshotsRequest): + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertSnapshotRequest): transport_class = transports.SnapshotsRestTransport request_init = {} @@ -1821,7 +1808,7 @@ def test_list_rest_required_fields(request_type=compute.ListSnapshotsRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1830,17 +1817,9 @@ def test_list_rest_required_fields(request_type=compute.ListSnapshotsRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1854,7 +1833,7 @@ def test_list_rest_required_fields(request_type=compute.ListSnapshotsRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SnapshotList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1865,46 +1844,44 @@ def test_list_rest_required_fields(request_type=compute.ListSnapshotsRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SnapshotList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "snapshotResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), @@ -1915,9 +1892,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SnapshotsRestInterceptor, "post_list" + transports.SnapshotsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.SnapshotsRestInterceptor, "pre_list" + transports.SnapshotsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1932,17 +1909,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SnapshotList.to_json(compute.SnapshotList()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListSnapshotsRequest() + request = compute.InsertSnapshotRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SnapshotList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -1954,8 +1931,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListSnapshotsRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSnapshotRequest ): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1964,6 +1941,38 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1975,10 +1984,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1987,7 +1996,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SnapshotList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1995,18 +2004,19 @@ def test_list_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SnapshotList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2019,7 +2029,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2028,91 +2038,975 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListSnapshotsRequest(), + client.insert( + compute.InsertSnapshotRequest(), project="project_value", + snapshot_resource=compute.Snapshot(auto_created=True), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): client = SnapshotsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.SnapshotList( - items=[ - compute.Snapshot(), - compute.Snapshot(), - compute.Snapshot(), - ], - next_page_token="abc", - ), - compute.SnapshotList( - items=[], - next_page_token="def", - ), - compute.SnapshotList( - items=[ - compute.Snapshot(), - ], - next_page_token="ghi", - ), - compute.SnapshotList( - items=[ - compute.Snapshot(), - compute.Snapshot(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.SnapshotList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Snapshot) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicySnapshotRequest, + compute.InsertSnapshotRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_insert_unary_rest(request_type): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "resource": "sample2"} - request_init["global_set_policy_request_resource"] = { - "bindings": [ - { + request_init = {"project": "sample1"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertSnapshotRequest): + transport_class = transports.SnapshotsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.SnapshotsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "snapshotResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.SnapshotsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), + ) + client = SnapshotsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SnapshotsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.SnapshotsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertSnapshotRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSnapshotRequest +): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["snapshot_resource"] = { + "auto_created": True, + "chain_name": "chain_name_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "disk_size_gb": 1261, + "download_bytes": 1502, + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "license_codes": [1361, 1362], + "licenses": ["licenses_value_1", "licenses_value_2"], + "location_hint": "location_hint_value", + "name": "name_value", + "satisfies_pzs": True, + "self_link": "self_link_value", + "snapshot_encryption_key": { + "kms_key_name": "kms_key_name_value", + "kms_key_service_account": "kms_key_service_account_value", + "raw_key": "raw_key_value", + "rsa_encrypted_key": "rsa_encrypted_key_value", + "sha256": "sha256_value", + }, + "source_disk": "source_disk_value", + "source_disk_encryption_key": {}, + "source_disk_id": "source_disk_id_value", + "status": "status_value", + "storage_bytes": 1403, + "storage_bytes_status": "storage_bytes_status_value", + "storage_locations": ["storage_locations_value_1", "storage_locations_value_2"], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + snapshot_resource=compute.Snapshot(auto_created=True), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/snapshots" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertSnapshotRequest(), + project="project_value", + snapshot_resource=compute.Snapshot(auto_created=True), + ) + + +def test_insert_unary_rest_error(): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListSnapshotsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SnapshotList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SnapshotList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListSnapshotsRequest): + transport_class = transports.SnapshotsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SnapshotList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SnapshotList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.SnapshotsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.SnapshotsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), + ) + client = SnapshotsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SnapshotsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.SnapshotsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SnapshotList.to_json(compute.SnapshotList()) + + request = compute.ListSnapshotsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SnapshotList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListSnapshotsRequest +): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SnapshotList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SnapshotList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/snapshots" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListSnapshotsRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.SnapshotList( + items=[ + compute.Snapshot(), + compute.Snapshot(), + compute.Snapshot(), + ], + next_page_token="abc", + ), + compute.SnapshotList( + items=[], + next_page_token="def", + ), + compute.SnapshotList( + items=[ + compute.Snapshot(), + ], + next_page_token="ghi", + ), + compute.SnapshotList( + items=[ + compute.Snapshot(), + compute.Snapshot(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.SnapshotList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Snapshot) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicySnapshotRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicySnapshotRequest, +): + transport_class = transports.SnapshotsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.SnapshotsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "globalSetPolicyRequestResource", + "project", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SnapshotsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), + ) + client = SnapshotsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SnapshotsRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.SnapshotsRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.SetIamPolicySnapshotRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicySnapshotRequest +): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_policy_request_resource"] = { + "bindings": [ + { "binding_id": "binding_id_value", "condition": { "description": "description_value", @@ -2189,33 +3083,172 @@ def test_set_iam_policy_rest(request_type): } request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "resource": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + resource="resource_value", + global_set_policy_request_resource=compute.GlobalSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/snapshots/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicySnapshotRequest(), + project="project_value", + resource="resource_value", + global_set_policy_request_resource=compute.GlobalSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsSnapshotRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = SnapshotsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "resource": "sample2"} + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } + request = request_type(request_init) + # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicySnapshotRequest, -): +def test_set_labels_rest_required_fields(request_type=compute.SetLabelsSnapshotRequest): transport_class = transports.SnapshotsRestTransport request_init = {} @@ -2232,7 +3265,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2242,7 +3275,7 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2258,7 +3291,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2277,28 +3310,28 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_labels(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_set_labels_rest_unset_required_fields(): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( - "globalSetPolicyRequestResource", + "globalSetLabelsRequestResource", "project", "resource", ) @@ -2307,7 +3340,7 @@ def test_set_iam_policy_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.SnapshotsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.SnapshotsRestInterceptor(), @@ -2318,9 +3351,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SnapshotsRestInterceptor, "post_set_iam_policy" + transports.SnapshotsRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.SnapshotsRestInterceptor, "pre_set_iam_policy" + transports.SnapshotsRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2335,17 +3368,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicySnapshotRequest() + request = compute.SetLabelsSnapshotRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.set_labels( request, metadata=[ ("key", "val"), @@ -2357,8 +3390,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicySnapshotRequest +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsSnapshotRequest ): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2367,82 +3400,9 @@ def test_set_iam_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "resource": "sample2"} - request_init["global_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init["global_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, } request = request_type(request_init) @@ -2455,10 +3415,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.set_labels(request) -def test_set_iam_policy_rest_flattened(): +def test_set_labels_rest_flattened(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2467,7 +3427,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "resource": "sample2"} @@ -2476,8 +3436,8 @@ def test_set_iam_policy_rest_flattened(): mock_args = dict( project="project_value", resource="resource_value", - global_set_policy_request_resource=compute.GlobalSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) mock_args.update(sample_request) @@ -2485,25 +3445,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.set_labels(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/snapshots/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/global/snapshots/{resource}/setLabels" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_set_labels_rest_flattened_error(transport: str = "rest"): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2512,17 +3472,17 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicySnapshotRequest(), + client.set_labels( + compute.SetLabelsSnapshotRequest(), project="project_value", resource="resource_value", - global_set_policy_request_resource=compute.GlobalSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" ), ) -def test_set_iam_policy_rest_error(): +def test_set_labels_rest_error(): client = SnapshotsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2587,28 +3547,6 @@ def test_set_labels_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_labels_unary_rest_required_fields( @@ -3211,6 +4149,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = SnapshotsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_snapshots_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3249,6 +4200,14 @@ def test_snapshots_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_snapshots_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_ssl_certificates.py b/tests/unit/gapic/compute_v1/test_ssl_certificates.py index f4687f997..c95018426 100644 --- a/tests/unit/gapic/compute_v1/test_ssl_certificates.py +++ b/tests/unit/gapic/compute_v1/test_ssl_certificates.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -898,7 +900,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -942,10 +944,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -970,9 +972,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteSslCertificateRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteSslCertificateRequest): transport_class = transports.SslCertificatesRestTransport request_init = {} @@ -1035,25 +1035,605 @@ def test_delete_unary_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_rest_unset_required_fields(): + transport = transports.SslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "sslCertificate", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.SslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SslCertificatesRestInterceptor(), + ) + client = SslCertificatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SslCertificatesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.SslCertificatesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteSslCertificateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSslCertificateRequest +): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "ssl_certificate": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "ssl_certificate": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ssl_certificate="ssl_certificate_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/sslCertificates/{ssl_certificate}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteSslCertificateRequest(), + project="project_value", + ssl_certificate="ssl_certificate_value", + ) + + +def test_delete_rest_error(): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteSslCertificateRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "ssl_certificate": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteSslCertificateRequest, +): + transport_class = transports.SslCertificatesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["ssl_certificate"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["sslCertificate"] = "ssl_certificate_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "sslCertificate" in jsonified_request + assert jsonified_request["sslCertificate"] == "ssl_certificate_value" + + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.SslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "sslCertificate", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.SslCertificatesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SslCertificatesRestInterceptor(), + ) + client = SslCertificatesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SslCertificatesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.SslCertificatesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteSslCertificateRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSslCertificateRequest +): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "ssl_certificate": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "ssl_certificate": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ssl_certificate="ssl_certificate_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/sslCertificates/{ssl_certificate}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteSslCertificateRequest(), + project="project_value", + ssl_certificate="ssl_certificate_value", + ) + + +def test_delete_unary_rest_error(): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetSslCertificateRequest, + dict, + ], +) +def test_get_rest(request_type): + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "ssl_certificate": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SslCertificate( + certificate="certificate_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + expire_time="expire_time_value", + id=205, + kind="kind_value", + name="name_value", + private_key="private_key_value", + region="region_value", + self_link="self_link_value", + subject_alternative_names=["subject_alternative_names_value"], + type_="type__value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslCertificate.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.SslCertificate) + assert response.certificate == "certificate_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.expire_time == "expire_time_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.private_key == "private_key_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.subject_alternative_names == ["subject_alternative_names_value"] + assert response.type_ == "type__value" + + +def test_get_rest_required_fields(request_type=compute.GetSslCertificateRequest): + transport_class = transports.SslCertificatesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["ssl_certificate"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["sslCertificate"] = "ssl_certificate_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "sslCertificate" in jsonified_request + assert jsonified_request["sslCertificate"] == "ssl_certificate_value" + + client = SslCertificatesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SslCertificate() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslCertificate.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.SslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", @@ -1064,7 +1644,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.SslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1077,9 +1657,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SslCertificatesRestInterceptor, "post_delete" + transports.SslCertificatesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.SslCertificatesRestInterceptor, "pre_delete" + transports.SslCertificatesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1094,17 +1674,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.SslCertificate.to_json( + compute.SslCertificate() + ) - request = compute.DeleteSslCertificateRequest() + request = compute.GetSslCertificateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.SslCertificate - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1116,8 +1698,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteSslCertificateRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetSslCertificateRequest ): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1137,10 +1719,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1149,7 +1731,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SslCertificate() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "ssl_certificate": "sample2"} @@ -1164,12 +1746,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SslCertificate.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1182,7 +1764,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1191,14 +1773,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteSslCertificateRequest(), + client.get( + compute.GetSslCertificateRequest(), project="project_value", ssl_certificate="ssl_certificate_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1207,68 +1789,113 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetSslCertificateRequest, + compute.InsertSslCertificateRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "ssl_certificate": "sample2"} + request_init = {"project": "sample1"} + request_init["ssl_certificate_resource"] = { + "certificate": "certificate_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "expire_time": "expire_time_value", + "id": 205, + "kind": "kind_value", + "managed": { + "domain_status": {}, + "domains": ["domains_value_1", "domains_value_2"], + "status": "status_value", + }, + "name": "name_value", + "private_key": "private_key_value", + "region": "region_value", + "self_link": "self_link_value", + "self_managed": { + "certificate": "certificate_value", + "private_key": "private_key_value", + }, + "subject_alternative_names": [ + "subject_alternative_names_value_1", + "subject_alternative_names_value_2", + ], + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslCertificate( - certificate="certificate_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - expire_time="expire_time_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - private_key="private_key_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - subject_alternative_names=["subject_alternative_names_value"], - type_="type__value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslCertificate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SslCertificate) - assert response.certificate == "certificate_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.expire_time == "expire_time_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.private_key == "private_key_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.subject_alternative_names == ["subject_alternative_names_value"] - assert response.type_ == "type__value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetSslCertificateRequest): +def test_insert_rest_required_fields(request_type=compute.InsertSslCertificateRequest): transport_class = transports.SslCertificatesRestTransport request_init = {} request_init["project"] = "" - request_init["ssl_certificate"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1280,24 +1907,23 @@ def test_get_rest_required_fields(request_type=compute.GetSslCertificateRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["sslCertificate"] = "ssl_certificate_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "sslCertificate" in jsonified_request - assert jsonified_request["sslCertificate"] == "ssl_certificate_value" client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1306,7 +1932,7 @@ def test_get_rest_required_fields(request_type=compute.GetSslCertificateRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SslCertificate() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1317,43 +1943,44 @@ def test_get_rest_required_fields(request_type=compute.GetSslCertificateRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslCertificate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.SslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", - "sslCertificate", + "sslCertificateResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.SslCertificatesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1366,9 +1993,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SslCertificatesRestInterceptor, "post_get" + transports.SslCertificatesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.SslCertificatesRestInterceptor, "pre_get" + transports.SslCertificatesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1383,19 +2010,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SslCertificate.to_json( - compute.SslCertificate() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetSslCertificateRequest() + request = compute.InsertSslCertificateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificate + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1407,8 +2032,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetSslCertificateRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSslCertificateRequest ): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1416,7 +2041,33 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "ssl_certificate": "sample2"} + request_init = {"project": "sample1"} + request_init["ssl_certificate_resource"] = { + "certificate": "certificate_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "expire_time": "expire_time_value", + "id": 205, + "kind": "kind_value", + "managed": { + "domain_status": {}, + "domains": ["domains_value_1", "domains_value_2"], + "status": "status_value", + }, + "name": "name_value", + "private_key": "private_key_value", + "region": "region_value", + "self_link": "self_link_value", + "self_managed": { + "certificate": "certificate_value", + "private_key": "private_key_value", + }, + "subject_alternative_names": [ + "subject_alternative_names_value_1", + "subject_alternative_names_value_2", + ], + "type_": "type__value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1428,10 +2079,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1440,40 +2091,42 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslCertificate() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "ssl_certificate": "sample2"} + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - ssl_certificate="ssl_certificate_value", + ssl_certificate_resource=compute.SslCertificate( + certificate="certificate_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslCertificate.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/sslCertificates/{ssl_certificate}" + "%s/compute/v1/projects/{project}/global/sslCertificates" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1482,14 +2135,16 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetSslCertificateRequest(), + client.insert( + compute.InsertSslCertificateRequest(), project="project_value", - ssl_certificate="ssl_certificate_value", + ssl_certificate_resource=compute.SslCertificate( + certificate="certificate_value" + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = SslCertificatesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1576,28 +2231,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -2273,6 +2906,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = SslCertificatesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_ssl_certificates_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2308,6 +2954,14 @@ def test_ssl_certificates_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_ssl_certificates_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_ssl_policies.py b/tests/unit/gapic/compute_v1/test_ssl_policies.py index 0dcc7d7e9..f24f9d338 100644 --- a/tests/unit/gapic/compute_v1/test_ssl_policies.py +++ b/tests/unit/gapic/compute_v1/test_ssl_policies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -516,7 +518,7 @@ def test_ssl_policies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -560,10 +562,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -588,7 +590,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteSslPolicyRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteSslPolicyRequest): transport_class = transports.SslPoliciesRestTransport request_init = {} @@ -655,14 +657,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteSslPolicyR response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -680,7 +682,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -720,7 +722,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -732,7 +734,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteSslPolicyRequest ): client = SslPoliciesClient( @@ -753,10 +755,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -785,7 +787,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -798,7 +800,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -807,14 +809,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteSslPolicyRequest(), project="project_value", ssl_policy="ssl_policy_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -823,11 +825,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetSslPolicyRequest, + compute.DeleteSslPolicyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -840,44 +842,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslPolicy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - custom_features=["custom_features_value"], description="description_value", - enabled_features=["enabled_features_value"], - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - min_tls_version="min_tls_version_value", name="name_value", - profile="profile_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SslPolicy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.custom_features == ["custom_features_value"] - assert response.description == "description_value" - assert response.enabled_features == ["enabled_features_value"] - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.min_tls_version == "min_tls_version_value" - assert response.name == "name_value" - assert response.profile == "profile_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetSslPolicyRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteSslPolicyRequest): transport_class = transports.SslPoliciesRestTransport request_init = {} @@ -894,7 +896,7 @@ def test_get_rest_required_fields(request_type=compute.GetSslPolicyRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -904,7 +906,9 @@ def test_get_rest_required_fields(request_type=compute.GetSslPolicyRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -920,7 +924,7 @@ def test_get_rest_required_fields(request_type=compute.GetSslPolicyRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SslPolicy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -931,32 +935,32 @@ def test_get_rest_required_fields(request_type=compute.GetSslPolicyRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -967,7 +971,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -980,9 +984,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SslPoliciesRestInterceptor, "post_get" + transports.SslPoliciesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.SslPoliciesRestInterceptor, "pre_get" + transports.SslPoliciesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -997,17 +1001,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SslPolicy.to_json(compute.SslPolicy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetSslPolicyRequest() + request = compute.DeleteSslPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslPolicy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1019,8 +1023,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetSslPolicyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSslPolicyRequest ): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1040,10 +1044,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1052,7 +1056,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslPolicy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "ssl_policy": "sample2"} @@ -1067,12 +1071,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPolicy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1085,7 +1089,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1094,14 +1098,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetSslPolicyRequest(), + client.delete_unary( + compute.DeleteSslPolicyRequest(), project="project_value", ssl_policy="ssl_policy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1110,107 +1114,66 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertSslPolicyRequest, + compute.GetSslPolicyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["ssl_policy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "custom_features": ["custom_features_value_1", "custom_features_value_2"], - "description": "description_value", - "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "min_tls_version": "min_tls_version_value", - "name": "name_value", - "profile": "profile_value", - "self_link": "self_link_value", - "warnings": [ - { - "code": "code_value", - "data": [{"key": "key_value", "value": "value_value"}], - "message": "message_value", - } - ], - } + request_init = {"project": "sample1", "ssl_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.SslPolicy( creation_timestamp="creation_timestamp_value", + custom_features=["custom_features_value"], description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + enabled_features=["enabled_features_value"], + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", + min_tls_version="min_tls_version_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + profile="profile_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SslPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.SslPolicy) assert response.creation_timestamp == "creation_timestamp_value" + assert response.custom_features == ["custom_features_value"] assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.enabled_features == ["enabled_features_value"] + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" + assert response.min_tls_version == "min_tls_version_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.profile == "profile_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields(request_type=compute.InsertSslPolicyRequest): +def test_get_rest_required_fields(request_type=compute.GetSslPolicyRequest): transport_class = transports.SslPoliciesRestTransport request_init = {} request_init["project"] = "" + request_init["ssl_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1222,23 +1185,24 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertSslPolicyR unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["sslPolicy"] = "ssl_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1247,7 +1211,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertSslPolicyR request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SslPolicy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1258,44 +1222,43 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertSslPolicyR # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SslPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "sslPolicyResource", + "sslPolicy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1308,9 +1271,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SslPoliciesRestInterceptor, "post_insert" + transports.SslPoliciesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.SslPoliciesRestInterceptor, "pre_insert" + transports.SslPoliciesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1325,17 +1288,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.SslPolicy.to_json(compute.SslPolicy()) - request = compute.InsertSslPolicyRequest() + request = compute.GetSslPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.SslPolicy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1347,8 +1310,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertSslPolicyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetSslPolicyRequest ): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1356,27 +1319,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["ssl_policy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "custom_features": ["custom_features_value_1", "custom_features_value_2"], - "description": "description_value", - "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "min_tls_version": "min_tls_version_value", - "name": "name_value", - "profile": "profile_value", - "self_link": "self_link_value", - "warnings": [ - { - "code": "code_value", - "data": [{"key": "key_value", "value": "value_value"}], - "message": "message_value", - } - ], - } + request_init = {"project": "sample1", "ssl_policy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1388,10 +1331,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1400,42 +1343,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.SslPolicy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "ssl_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - ssl_policy_resource=compute.SslPolicy( - creation_timestamp="creation_timestamp_value" - ), + ssl_policy="ssl_policy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.SslPolicy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/sslPolicies" + "%s/compute/v1/projects/{project}/global/sslPolicies/{ssl_policy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1444,16 +1385,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertSslPolicyRequest(), + client.get( + compute.GetSslPolicyRequest(), project="project_value", - ssl_policy_resource=compute.SslPolicy( - creation_timestamp="creation_timestamp_value" - ), + ssl_policy="ssl_policy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1462,11 +1401,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListSslPoliciesRequest, + compute.InsertSslPolicyRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1474,35 +1413,91 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value_1", "custom_features_value_2"], + "description": "description_value", + "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "self_link": "self_link_value", + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslPoliciesList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPoliciesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListSslPoliciesRequest): +def test_insert_rest_required_fields(request_type=compute.InsertSslPolicyRequest): transport_class = transports.SslPoliciesRestTransport request_init = {} @@ -1518,7 +1513,7 @@ def test_list_rest_required_fields(request_type=compute.ListSslPoliciesRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1527,17 +1522,9 @@ def test_list_rest_required_fields(request_type=compute.ListSslPoliciesRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1551,7 +1538,7 @@ def test_list_rest_required_fields(request_type=compute.ListSslPoliciesRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SslPoliciesList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1562,46 +1549,44 @@ def test_list_rest_required_fields(request_type=compute.ListSslPoliciesRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPoliciesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "sslPolicyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1614,9 +1599,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SslPoliciesRestInterceptor, "post_list" + transports.SslPoliciesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.SslPoliciesRestInterceptor, "pre_list" + transports.SslPoliciesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1631,19 +1616,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SslPoliciesList.to_json( - compute.SslPoliciesList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListSslPoliciesRequest() + request = compute.InsertSslPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslPoliciesList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -1655,8 +1638,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListSslPoliciesRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSslPolicyRequest ): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1665,6 +1648,26 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value_1", "custom_features_value_2"], + "description": "description_value", + "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "self_link": "self_link_value", + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1676,10 +1679,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1688,7 +1691,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslPoliciesList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1696,18 +1699,21 @@ def test_list_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPoliciesList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1720,7 +1726,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1729,35 +1735,650 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListSslPoliciesRequest(), + client.insert( + compute.InsertSslPolicyRequest(), project="project_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertSslPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + transport="rest", ) + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value_1", "custom_features_value_2"], + "description": "description_value", + "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "self_link": "self_link_value", + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } + request = request_type(request_init) + # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.SslPoliciesList( - items=[ - compute.SslPolicy(), - compute.SslPolicy(), - compute.SslPolicy(), - ], - next_page_token="abc", - ), - compute.SslPoliciesList( - items=[], - next_page_token="def", + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertSslPolicyRequest): + transport_class = transports.SslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "sslPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SslPoliciesRestInterceptor(), + ) + client = SslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SslPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.SslPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertSslPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSslPolicyRequest +): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value_1", "custom_features_value_2"], + "description": "description_value", + "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "self_link": "self_link_value", + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/sslPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertSslPolicyRequest(), + project="project_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListSslPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SslPoliciesList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslPoliciesList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListSslPoliciesRequest): + transport_class = transports.SslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SslPoliciesList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslPoliciesList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SslPoliciesRestInterceptor(), + ) + client = SslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SslPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.SslPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SslPoliciesList.to_json( + compute.SslPoliciesList() + ) + + request = compute.ListSslPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SslPoliciesList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListSslPoliciesRequest +): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SslPoliciesList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslPoliciesList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/sslPolicies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListSslPoliciesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.SslPoliciesList( + items=[ + compute.SslPolicy(), + compute.SslPolicy(), + compute.SslPolicy(), + ], + next_page_token="abc", + ), + compute.SslPoliciesList( + items=[], + next_page_token="def", ), compute.SslPoliciesList( items=[ @@ -1772,76 +2393,422 @@ def test_list_rest_pager(transport: str = "rest"): ], ), ) - # Two responses for two calls - response = response + response + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.SslPoliciesList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.SslPolicy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListAvailableFeaturesSslPoliciesRequest, + dict, + ], +) +def test_list_available_features_rest(request_type): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SslPoliciesListAvailableFeaturesResponse( + features=["features_value"], + ) - # Wrap the values into proper Response objs - response = tuple(compute.SslPoliciesList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslPoliciesListAvailableFeaturesResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_available_features(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.SslPoliciesListAvailableFeaturesResponse) + assert response.features == ["features_value"] + + +def test_list_available_features_rest_required_fields( + request_type=compute.ListAvailableFeaturesSslPoliciesRequest, +): + transport_class = transports.SslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_available_features._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_available_features._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SslPoliciesListAvailableFeaturesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = ( + compute.SslPoliciesListAvailableFeaturesResponse.to_json(return_value) + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_available_features(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_available_features_rest_unset_required_fields(): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_available_features._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_available_features_rest_interceptors(null_interceptor): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SslPoliciesRestInterceptor(), + ) + client = SslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SslPoliciesRestInterceptor, "post_list_available_features" + ) as post, mock.patch.object( + transports.SslPoliciesRestInterceptor, "pre_list_available_features" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = ( + compute.SslPoliciesListAvailableFeaturesResponse.to_json( + compute.SslPoliciesListAvailableFeaturesResponse() + ) + ) + + request = compute.ListAvailableFeaturesSslPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SslPoliciesListAvailableFeaturesResponse + + client.list_available_features( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_available_features_rest_bad_request( + transport: str = "rest", + request_type=compute.ListAvailableFeaturesSslPoliciesRequest, +): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_available_features(request) + + +def test_list_available_features_rest_flattened(): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SslPoliciesListAvailableFeaturesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SslPoliciesListAvailableFeaturesResponse.to_json( + return_value + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_available_features(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/sslPolicies/listAvailableFeatures" + % client.transport._host, + args[1], + ) - sample_request = {"project": "sample1"} - pager = client.list(request=sample_request) +def test_list_available_features_rest_flattened_error(transport: str = "rest"): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.SslPolicy) for i in results) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_available_features( + compute.ListAvailableFeaturesSslPoliciesRequest(), + project="project_value", + ) - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token + +def test_list_available_features_rest_error(): + client = SslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) @pytest.mark.parametrize( "request_type", [ - compute.ListAvailableFeaturesSslPoliciesRequest, + compute.PatchSslPolicyRequest, dict, ], ) -def test_list_available_features_rest(request_type): +def test_patch_rest(request_type): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "ssl_policy": "sample2"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value_1", "custom_features_value_2"], + "description": "description_value", + "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "self_link": "self_link_value", + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslPoliciesListAvailableFeaturesResponse( - features=["features_value"], + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPoliciesListAvailableFeaturesResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_available_features(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.SslPoliciesListAvailableFeaturesResponse) - assert response.features == ["features_value"] + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_available_features_rest_required_fields( - request_type=compute.ListAvailableFeaturesSslPoliciesRequest, -): +def test_patch_rest_required_fields(request_type=compute.PatchSslPolicyRequest): transport_class = transports.SslPoliciesRestTransport request_init = {} request_init["project"] = "" + request_init["ssl_policy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1853,31 +2820,26 @@ def test_list_available_features_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_available_features._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["sslPolicy"] = "ssl_policy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_available_features._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1886,7 +2848,7 @@ def test_list_available_features_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SslPoliciesListAvailableFeaturesResponse() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1897,48 +2859,45 @@ def test_list_available_features_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = ( - compute.SslPoliciesListAvailableFeaturesResponse.to_json(return_value) - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_available_features(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_available_features_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_available_features._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "sslPolicy", + "sslPolicyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_available_features_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.SslPoliciesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1951,9 +2910,9 @@ def test_list_available_features_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SslPoliciesRestInterceptor, "post_list_available_features" + transports.SslPoliciesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.SslPoliciesRestInterceptor, "pre_list_available_features" + transports.SslPoliciesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1968,21 +2927,17 @@ def test_list_available_features_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - compute.SslPoliciesListAvailableFeaturesResponse.to_json( - compute.SslPoliciesListAvailableFeaturesResponse() - ) - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListAvailableFeaturesSslPoliciesRequest() + request = compute.PatchSslPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslPoliciesListAvailableFeaturesResponse + post.return_value = compute.Operation - client.list_available_features( + client.patch( request, metadata=[ ("key", "val"), @@ -1994,9 +2949,8 @@ def test_list_available_features_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_available_features_rest_bad_request( - transport: str = "rest", - request_type=compute.ListAvailableFeaturesSslPoliciesRequest, +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchSslPolicyRequest ): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2004,7 +2958,27 @@ def test_list_available_features_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "ssl_policy": "sample2"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value_1", "custom_features_value_2"], + "description": "description_value", + "enabled_features": ["enabled_features_value_1", "enabled_features_value_2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "self_link": "self_link_value", + "warnings": [ + { + "code": "code_value", + "data": [{"key": "key_value", "value": "value_value"}], + "message": "message_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2016,10 +2990,10 @@ def test_list_available_features_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_available_features(request) + client.patch(request) -def test_list_available_features_rest_flattened(): +def test_patch_rest_flattened(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2028,41 +3002,43 @@ def test_list_available_features_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SslPoliciesListAvailableFeaturesResponse() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "ssl_policy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + ssl_policy="ssl_policy_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SslPoliciesListAvailableFeaturesResponse.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_available_features(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/sslPolicies/listAvailableFeatures" + "%s/compute/v1/projects/{project}/global/sslPolicies/{ssl_policy}" % client.transport._host, args[1], ) -def test_list_available_features_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2071,13 +3047,17 @@ def test_list_available_features_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_available_features( - compute.ListAvailableFeaturesSslPoliciesRequest(), + client.patch( + compute.PatchSslPolicyRequest(), project="project_value", + ssl_policy="ssl_policy_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_available_features_rest_error(): +def test_patch_rest_error(): client = SslPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2158,28 +3138,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields(request_type=compute.PatchSslPolicyRequest): @@ -2517,6 +3475,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = SslPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_ssl_policies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2553,6 +3524,14 @@ def test_ssl_policies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_ssl_policies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_subnetworks.py b/tests/unit/gapic/compute_v1/test_subnetworks.py index 745b49f79..83763b561 100644 --- a/tests/unit/gapic/compute_v1/test_subnetworks.py +++ b/tests/unit/gapic/compute_v1/test_subnetworks.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -871,7 +873,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -915,10 +917,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -943,9 +945,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteSubnetworkRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteSubnetworkRequest): transport_class = transports.SubnetworksRestTransport request_init = {} @@ -1016,14 +1016,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1042,7 +1042,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1082,7 +1082,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1094,7 +1094,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteSubnetworkRequest ): client = SubnetworksClient( @@ -1115,10 +1115,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1152,7 +1152,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1165,7 +1165,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1174,7 +1174,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteSubnetworkRequest(), project="project_value", region="region_value", @@ -1182,7 +1182,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1191,11 +1191,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ExpandIpCidrRangeSubnetworkRequest, + compute.DeleteSubnetworkRequest, dict, ], ) -def test_expand_ip_cidr_range_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1203,9 +1203,6 @@ def test_expand_ip_cidr_range_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} - request_init["subnetworks_expand_ip_cidr_range_request_resource"] = { - "ip_cidr_range": "ip_cidr_range_value" - } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1242,36 +1239,14 @@ def test_expand_ip_cidr_range_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.expand_ip_cidr_range_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_expand_ip_cidr_range_unary_rest_required_fields( - request_type=compute.ExpandIpCidrRangeSubnetworkRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteSubnetworkRequest, ): transport_class = transports.SubnetworksRestTransport @@ -1290,7 +1265,7 @@ def test_expand_ip_cidr_range_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).expand_ip_cidr_range._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1301,7 +1276,7 @@ def test_expand_ip_cidr_range_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).expand_ip_cidr_range._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1332,10 +1307,9 @@ def test_expand_ip_cidr_range_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1344,19 +1318,19 @@ def test_expand_ip_cidr_range_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.expand_ip_cidr_range_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_expand_ip_cidr_range_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.expand_ip_cidr_range._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -1364,14 +1338,13 @@ def test_expand_ip_cidr_range_unary_rest_unset_required_fields(): "project", "region", "subnetwork", - "subnetworksExpandIpCidrRangeRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1384,9 +1357,9 @@ def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_expand_ip_cidr_range" + transports.SubnetworksRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_expand_ip_cidr_range" + transports.SubnetworksRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1403,7 +1376,7 @@ def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ExpandIpCidrRangeSubnetworkRequest() + request = compute.DeleteSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1411,7 +1384,7 @@ def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.expand_ip_cidr_range_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1423,8 +1396,8 @@ def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_expand_ip_cidr_range_unary_rest_bad_request( - transport: str = "rest", request_type=compute.ExpandIpCidrRangeSubnetworkRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteSubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1433,9 +1406,6 @@ def test_expand_ip_cidr_range_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} - request_init["subnetworks_expand_ip_cidr_range_request_resource"] = { - "ip_cidr_range": "ip_cidr_range_value" - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1447,10 +1417,10 @@ def test_expand_ip_cidr_range_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.expand_ip_cidr_range_unary(request) + client.delete_unary(request) -def test_expand_ip_cidr_range_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1473,9 +1443,6 @@ def test_expand_ip_cidr_range_unary_rest_flattened(): project="project_value", region="region_value", subnetwork="subnetwork_value", - subnetworks_expand_ip_cidr_range_request_resource=compute.SubnetworksExpandIpCidrRangeRequest( - ip_cidr_range="ip_cidr_range_value" - ), ) mock_args.update(sample_request) @@ -1487,20 +1454,20 @@ def test_expand_ip_cidr_range_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.expand_ip_cidr_range_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}/expandIpCidrRange" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}" % client.transport._host, args[1], ) -def test_expand_ip_cidr_range_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1509,18 +1476,15 @@ def test_expand_ip_cidr_range_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.expand_ip_cidr_range_unary( - compute.ExpandIpCidrRangeSubnetworkRequest(), + client.delete_unary( + compute.DeleteSubnetworkRequest(), project="project_value", region="region_value", subnetwork="subnetwork_value", - subnetworks_expand_ip_cidr_range_request_resource=compute.SubnetworksExpandIpCidrRangeRequest( - ip_cidr_range="ip_cidr_range_value" - ), ) -def test_expand_ip_cidr_range_unary_rest_error(): +def test_delete_unary_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1529,11 +1493,11 @@ def test_expand_ip_cidr_range_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetSubnetworkRequest, + compute.ExpandIpCidrRangeSubnetworkRequest, dict, ], ) -def test_get_rest(request_type): +def test_expand_ip_cidr_range_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1541,71 +1505,76 @@ def test_get_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetworks_expand_ip_cidr_range_request_resource"] = { + "ip_cidr_range": "ip_cidr_range_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Subnetwork( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - enable_flow_logs=True, - external_ipv6_prefix="external_ipv6_prefix_value", - fingerprint="fingerprint_value", - gateway_address="gateway_address_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - internal_ipv6_prefix="internal_ipv6_prefix_value", - ip_cidr_range="ip_cidr_range_value", - ipv6_access_type="ipv6_access_type_value", - ipv6_cidr_range="ipv6_cidr_range_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", - private_ip_google_access=True, - private_ipv6_google_access="private_ipv6_google_access_value", - purpose="purpose_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - role="role_value", self_link="self_link_value", - stack_type="stack_type_value", - state="state_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Subnetwork.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.expand_ip_cidr_range(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Subnetwork) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.enable_flow_logs is True - assert response.external_ipv6_prefix == "external_ipv6_prefix_value" - assert response.fingerprint == "fingerprint_value" - assert response.gateway_address == "gateway_address_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.internal_ipv6_prefix == "internal_ipv6_prefix_value" - assert response.ip_cidr_range == "ip_cidr_range_value" - assert response.ipv6_access_type == "ipv6_access_type_value" - assert response.ipv6_cidr_range == "ipv6_cidr_range_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" - assert response.private_ip_google_access is True - assert response.private_ipv6_google_access == "private_ipv6_google_access_value" - assert response.purpose == "purpose_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" - assert response.role == "role_value" assert response.self_link == "self_link_value" - assert response.stack_type == "stack_type_value" - assert response.state == "state_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetSubnetworkRequest): +def test_expand_ip_cidr_range_rest_required_fields( + request_type=compute.ExpandIpCidrRangeSubnetworkRequest, +): transport_class = transports.SubnetworksRestTransport request_init = {} @@ -1623,7 +1592,7 @@ def test_get_rest_required_fields(request_type=compute.GetSubnetworkRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).expand_ip_cidr_range._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1634,7 +1603,9 @@ def test_get_rest_required_fields(request_type=compute.GetSubnetworkRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).expand_ip_cidr_range._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1652,7 +1623,7 @@ def test_get_rest_required_fields(request_type=compute.GetSubnetworkRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Subnetwork() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1663,44 +1634,46 @@ def test_get_rest_required_fields(request_type=compute.GetSubnetworkRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Subnetwork.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.expand_ip_cidr_range(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_expand_ip_cidr_range_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.expand_ip_cidr_range._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "region", "subnetwork", + "subnetworksExpandIpCidrRangeRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_expand_ip_cidr_range_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1713,9 +1686,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_get" + transports.SubnetworksRestInterceptor, "post_expand_ip_cidr_range" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_get" + transports.SubnetworksRestInterceptor, "pre_expand_ip_cidr_range" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1730,17 +1703,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Subnetwork.to_json(compute.Subnetwork()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetSubnetworkRequest() + request = compute.ExpandIpCidrRangeSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Subnetwork + post.return_value = compute.Operation - client.get( + client.expand_ip_cidr_range( request, metadata=[ ("key", "val"), @@ -1752,8 +1725,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetSubnetworkRequest +def test_expand_ip_cidr_range_rest_bad_request( + transport: str = "rest", request_type=compute.ExpandIpCidrRangeSubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1762,6 +1735,9 @@ def test_get_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetworks_expand_ip_cidr_range_request_resource"] = { + "ip_cidr_range": "ip_cidr_range_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1773,10 +1749,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.expand_ip_cidr_range(request) -def test_get_rest_flattened(): +def test_expand_ip_cidr_range_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1785,7 +1761,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Subnetwork() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1799,31 +1775,34 @@ def test_get_rest_flattened(): project="project_value", region="region_value", subnetwork="subnetwork_value", + subnetworks_expand_ip_cidr_range_request_resource=compute.SubnetworksExpandIpCidrRangeRequest( + ip_cidr_range="ip_cidr_range_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Subnetwork.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.expand_ip_cidr_range(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}/expandIpCidrRange" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_expand_ip_cidr_range_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1832,15 +1811,18 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetSubnetworkRequest(), + client.expand_ip_cidr_range( + compute.ExpandIpCidrRangeSubnetworkRequest(), project="project_value", region="region_value", subnetwork="subnetwork_value", + subnetworks_expand_ip_cidr_range_request_resource=compute.SubnetworksExpandIpCidrRangeRequest( + ip_cidr_range="ip_cidr_range_value" + ), ) -def test_get_rest_error(): +def test_expand_ip_cidr_range_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1849,53 +1831,72 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetIamPolicySubnetworkRequest, + compute.ExpandIpCidrRangeSubnetworkRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_expand_ip_cidr_range_unary_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetworks_expand_ip_cidr_range_request_resource"] = { + "ip_cidr_range": "ip_cidr_range_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.expand_ip_cidr_range_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, compute.Operation) -def test_get_iam_policy_rest_required_fields( - request_type=compute.GetIamPolicySubnetworkRequest, +def test_expand_ip_cidr_range_unary_rest_required_fields( + request_type=compute.ExpandIpCidrRangeSubnetworkRequest, ): transport_class = transports.SubnetworksRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" + request_init["subnetwork"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1907,20 +1908,20 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).expand_ip_cidr_range._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" + jsonified_request["subnetwork"] = "subnetwork_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).expand_ip_cidr_range._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("options_requested_policy_version",)) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1928,8 +1929,8 @@ def test_get_iam_policy_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "subnetwork" in jsonified_request + assert jsonified_request["subnetwork"] == "subnetwork_value" client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1938,7 +1939,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1949,44 +1950,46 @@ def test_get_iam_policy_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.expand_ip_cidr_range_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_expand_ip_cidr_range_unary_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + unset_fields = transport.expand_ip_cidr_range._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("optionsRequestedPolicyVersion",)) + set(("requestId",)) & set( ( "project", "region", - "resource", + "subnetwork", + "subnetworksExpandIpCidrRangeRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1999,9 +2002,9 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_get_iam_policy" + transports.SubnetworksRestInterceptor, "post_expand_ip_cidr_range" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_get_iam_policy" + transports.SubnetworksRestInterceptor, "pre_expand_ip_cidr_range" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2016,17 +2019,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetIamPolicySubnetworkRequest() + request = compute.ExpandIpCidrRangeSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.get_iam_policy( + client.expand_ip_cidr_range_unary( request, metadata=[ ("key", "val"), @@ -2038,8 +2041,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.GetIamPolicySubnetworkRequest +def test_expand_ip_cidr_range_unary_rest_bad_request( + transport: str = "rest", request_type=compute.ExpandIpCidrRangeSubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2047,7 +2050,10 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetworks_expand_ip_cidr_range_request_resource"] = { + "ip_cidr_range": "ip_cidr_range_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2059,10 +2065,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.expand_ip_cidr_range_unary(request) -def test_get_iam_policy_rest_flattened(): +def test_expand_ip_cidr_range_unary_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2071,45 +2077,48 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "region": "sample2", - "resource": "sample3", + "subnetwork": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", + subnetwork="subnetwork_value", + subnetworks_expand_ip_cidr_range_request_resource=compute.SubnetworksExpandIpCidrRangeRequest( + ip_cidr_range="ip_cidr_range_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.expand_ip_cidr_range_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{resource}/getIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}/expandIpCidrRange" % client.transport._host, args[1], ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_expand_ip_cidr_range_unary_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2118,15 +2127,18 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - compute.GetIamPolicySubnetworkRequest(), + client.expand_ip_cidr_range_unary( + compute.ExpandIpCidrRangeSubnetworkRequest(), project="project_value", region="region_value", - resource="resource_value", + subnetwork="subnetwork_value", + subnetworks_expand_ip_cidr_range_request_resource=compute.SubnetworksExpandIpCidrRangeRequest( + ip_cidr_range="ip_cidr_range_value" + ), ) -def test_get_iam_policy_rest_error(): +def test_expand_ip_cidr_range_unary_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2135,125 +2147,89 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertSubnetworkRequest, + compute.GetSubnetworkRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["subnetwork_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable_flow_logs": True, - "external_ipv6_prefix": "external_ipv6_prefix_value", - "fingerprint": "fingerprint_value", - "gateway_address": "gateway_address_value", - "id": 205, - "internal_ipv6_prefix": "internal_ipv6_prefix_value", - "ip_cidr_range": "ip_cidr_range_value", - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_cidr_range": "ipv6_cidr_range_value", - "kind": "kind_value", - "log_config": { - "aggregation_interval": "aggregation_interval_value", - "enable": True, - "filter_expr": "filter_expr_value", - "flow_sampling": 0.1394, - "metadata": "metadata_value", - "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], - }, - "name": "name_value", - "network": "network_value", - "private_ip_google_access": True, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "purpose": "purpose_value", - "region": "region_value", - "role": "role_value", - "secondary_ip_ranges": [ - {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} - ], - "self_link": "self_link_value", - "stack_type": "stack_type_value", - "state": "state_value", - } + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.Subnetwork( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + enable_flow_logs=True, + external_ipv6_prefix="external_ipv6_prefix_value", + fingerprint="fingerprint_value", + gateway_address="gateway_address_value", id=205, - insert_time="insert_time_value", + internal_ipv6_prefix="internal_ipv6_prefix_value", + ip_cidr_range="ip_cidr_range_value", + ipv6_access_type="ipv6_access_type_value", + ipv6_cidr_range="ipv6_cidr_range_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + network="network_value", + private_ip_google_access=True, + private_ipv6_google_access="private_ipv6_google_access_value", + purpose="purpose_value", region="region_value", + role="role_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + stack_type="stack_type_value", + state="state_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Subnetwork.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.Subnetwork) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.enable_flow_logs is True + assert response.external_ipv6_prefix == "external_ipv6_prefix_value" + assert response.fingerprint == "fingerprint_value" + assert response.gateway_address == "gateway_address_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert response.internal_ipv6_prefix == "internal_ipv6_prefix_value" + assert response.ip_cidr_range == "ip_cidr_range_value" + assert response.ipv6_access_type == "ipv6_access_type_value" + assert response.ipv6_cidr_range == "ipv6_cidr_range_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.network == "network_value" + assert response.private_ip_google_access is True + assert response.private_ipv6_google_access == "private_ipv6_google_access_value" + assert response.purpose == "purpose_value" assert response.region == "region_value" + assert response.role == "role_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.stack_type == "stack_type_value" + assert response.state == "state_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertSubnetworkRequest, -): +def test_get_rest_required_fields(request_type=compute.GetSubnetworkRequest): transport_class = transports.SubnetworksRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["subnetwork"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2265,19 +2241,18 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["subnetwork"] = "subnetwork_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2285,6 +2260,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "subnetwork" in jsonified_request + assert jsonified_request["subnetwork"] == "subnetwork_value" client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2293,7 +2270,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Subnetwork() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2304,45 +2281,44 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Subnetwork.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", "region", - "subnetworkResource", + "subnetwork", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2355,9 +2331,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_insert" + transports.SubnetworksRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_insert" + transports.SubnetworksRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2372,17 +2348,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.Subnetwork.to_json(compute.Subnetwork()) - request = compute.InsertSubnetworkRequest() + request = compute.GetSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Subnetwork - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -2394,8 +2370,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertSubnetworkRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetSubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2403,42 +2379,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["subnetwork_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "enable_flow_logs": True, - "external_ipv6_prefix": "external_ipv6_prefix_value", - "fingerprint": "fingerprint_value", - "gateway_address": "gateway_address_value", - "id": 205, - "internal_ipv6_prefix": "internal_ipv6_prefix_value", - "ip_cidr_range": "ip_cidr_range_value", - "ipv6_access_type": "ipv6_access_type_value", - "ipv6_cidr_range": "ipv6_cidr_range_value", - "kind": "kind_value", - "log_config": { - "aggregation_interval": "aggregation_interval_value", - "enable": True, - "filter_expr": "filter_expr_value", - "flow_sampling": 0.1394, - "metadata": "metadata_value", - "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], - }, - "name": "name_value", - "network": "network_value", - "private_ip_google_access": True, - "private_ipv6_google_access": "private_ipv6_google_access_value", - "purpose": "purpose_value", - "region": "region_value", - "role": "role_value", - "secondary_ip_ranges": [ - {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} - ], - "self_link": "self_link_value", - "stack_type": "stack_type_value", - "state": "state_value", - } + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2450,10 +2391,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2462,43 +2403,45 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.Subnetwork() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "subnetwork": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - subnetwork_resource=compute.Subnetwork( - creation_timestamp="creation_timestamp_value" - ), + subnetwork="subnetwork_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.Subnetwork.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2507,17 +2450,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertSubnetworkRequest(), + client.get( + compute.GetSubnetworkRequest(), project="project_value", region="region_value", - subnetwork_resource=compute.Subnetwork( - creation_timestamp="creation_timestamp_value" - ), + subnetwork="subnetwork_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2526,52 +2467,53 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListSubnetworksRequest, + compute.GetIamPolicySubnetworkRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_iam_policy_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SubnetworkList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SubnetworkList.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 -def test_list_rest_required_fields(request_type=compute.ListSubnetworksRequest): +def test_get_iam_policy_rest_required_fields( + request_type=compute.GetIamPolicySubnetworkRequest, +): transport_class = transports.SubnetworksRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2583,27 +2525,20 @@ def test_list_rest_required_fields(request_type=compute.ListSubnetworksRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get_iam_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("options_requested_policy_version",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2611,6 +2546,8 @@ def test_list_rest_required_fields(request_type=compute.ListSubnetworksRequest): assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2619,7 +2556,7 @@ def test_list_rest_required_fields(request_type=compute.ListSubnetworksRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.SubnetworkList() + return_value = compute.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2637,44 +2574,37 @@ def test_list_rest_required_fields(request_type=compute.ListSubnetworksRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.SubnetworkList.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get_iam_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_iam_policy_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("optionsRequestedPolicyVersion",)) & set( ( "project", "region", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_iam_policy_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2687,9 +2617,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_list" + transports.SubnetworksRestInterceptor, "post_get_iam_policy" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_list" + transports.SubnetworksRestInterceptor, "pre_get_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2704,19 +2634,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.SubnetworkList.to_json( - compute.SubnetworkList() - ) + req.return_value._content = compute.Policy.to_json(compute.Policy()) - request = compute.ListSubnetworksRequest() + request = compute.GetIamPolicySubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SubnetworkList + post.return_value = compute.Policy - client.list( + client.get_iam_policy( request, metadata=[ ("key", "val"), @@ -2728,8 +2656,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListSubnetworksRequest +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.GetIamPolicySubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2737,7 +2665,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2749,10 +2677,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get_iam_policy(request) -def test_list_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2761,40 +2689,45 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.SubnetworkList() + return_value = compute.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.SubnetworkList.to_json(return_value) + json_return_value = compute.Policy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{resource}/getIamPolicy" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2803,126 +2736,140 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListSubnetworksRequest(), + client.get_iam_policy( + compute.GetIamPolicySubnetworkRequest(), project="project_value", region="region_value", + resource="resource_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_iam_policy_rest_error(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertSubnetworkRequest, + dict, + ], +) +def test_insert_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.SubnetworkList( - items=[ - compute.Subnetwork(), - compute.Subnetwork(), - compute.Subnetwork(), - ], - next_page_token="abc", - ), - compute.SubnetworkList( - items=[], - next_page_token="def", - ), - compute.SubnetworkList( - items=[ - compute.Subnetwork(), - ], - next_page_token="ghi", - ), - compute.SubnetworkList( - items=[ - compute.Subnetwork(), - compute.Subnetwork(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.SubnetworkList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.Subnetwork) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize( - "request_type", - [ - compute.ListUsableSubnetworksRequest, - dict, - ], -) -def test_list_usable_rest(request_type): - client = SubnetworksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["subnetwork_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_flow_logs": True, + "external_ipv6_prefix": "external_ipv6_prefix_value", + "fingerprint": "fingerprint_value", + "gateway_address": "gateway_address_value", + "id": 205, + "internal_ipv6_prefix": "internal_ipv6_prefix_value", + "ip_cidr_range": "ip_cidr_range_value", + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_cidr_range": "ipv6_cidr_range_value", + "kind": "kind_value", + "log_config": { + "aggregation_interval": "aggregation_interval_value", + "enable": True, + "filter_expr": "filter_expr_value", + "flow_sampling": 0.1394, + "metadata": "metadata_value", + "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], + }, + "name": "name_value", + "network": "network_value", + "private_ip_google_access": True, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "purpose": "purpose_value", + "region": "region_value", + "role": "role_value", + "secondary_ip_ranges": [ + {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} + ], + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UsableSubnetworksAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UsableSubnetworksAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_usable(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListUsablePager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_usable_rest_required_fields( - request_type=compute.ListUsableSubnetworksRequest, -): +def test_insert_rest_required_fields(request_type=compute.InsertSubnetworkRequest): transport_class = transports.SubnetworksRestTransport request_init = {} request_init["project"] = "" + request_init["region"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2934,31 +2881,26 @@ def test_list_usable_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_usable._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_usable._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2967,7 +2909,7 @@ def test_list_usable_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.UsableSubnetworksAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2978,48 +2920,45 @@ def test_list_usable_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.UsableSubnetworksAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_usable(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_usable_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_usable._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "region", + "subnetworkResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_usable_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3032,9 +2971,9 @@ def test_list_usable_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_list_usable" + transports.SubnetworksRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_list_usable" + transports.SubnetworksRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3049,19 +2988,17 @@ def test_list_usable_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.UsableSubnetworksAggregatedList.to_json( - compute.UsableSubnetworksAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListUsableSubnetworksRequest() + request = compute.InsertSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UsableSubnetworksAggregatedList + post.return_value = compute.Operation - client.list_usable( + client.insert( request, metadata=[ ("key", "val"), @@ -3073,8 +3010,8 @@ def test_list_usable_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_usable_rest_bad_request( - transport: str = "rest", request_type=compute.ListUsableSubnetworksRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3082,7 +3019,42 @@ def test_list_usable_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["subnetwork_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_flow_logs": True, + "external_ipv6_prefix": "external_ipv6_prefix_value", + "fingerprint": "fingerprint_value", + "gateway_address": "gateway_address_value", + "id": 205, + "internal_ipv6_prefix": "internal_ipv6_prefix_value", + "ip_cidr_range": "ip_cidr_range_value", + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_cidr_range": "ipv6_cidr_range_value", + "kind": "kind_value", + "log_config": { + "aggregation_interval": "aggregation_interval_value", + "enable": True, + "filter_expr": "filter_expr_value", + "flow_sampling": 0.1394, + "metadata": "metadata_value", + "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], + }, + "name": "name_value", + "network": "network_value", + "private_ip_google_access": True, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "purpose": "purpose_value", + "region": "region_value", + "role": "role_value", + "secondary_ip_ranges": [ + {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} + ], + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3094,10 +3066,10 @@ def test_list_usable_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_usable(request) + client.insert(request) -def test_list_usable_rest_flattened(): +def test_insert_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3106,41 +3078,43 @@ def test_list_usable_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UsableSubnetworksAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + region="region_value", + subnetwork_resource=compute.Subnetwork( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UsableSubnetworksAggregatedList.to_json( - return_value - ) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_usable(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/subnetworks/listUsable" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks" % client.transport._host, args[1], ) -def test_list_usable_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3149,90 +3123,37 @@ def test_list_usable_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_usable( - compute.ListUsableSubnetworksRequest(), + client.insert( + compute.InsertSubnetworkRequest(), project="project_value", + region="region_value", + subnetwork_resource=compute.Subnetwork( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_usable_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): client = SubnetworksClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.UsableSubnetworksAggregatedList( - items=[ - compute.UsableSubnetwork(), - compute.UsableSubnetwork(), - compute.UsableSubnetwork(), - ], - next_page_token="abc", - ), - compute.UsableSubnetworksAggregatedList( - items=[], - next_page_token="def", - ), - compute.UsableSubnetworksAggregatedList( - items=[ - compute.UsableSubnetwork(), - ], - next_page_token="ghi", - ), - compute.UsableSubnetworksAggregatedList( - items=[ - compute.UsableSubnetwork(), - compute.UsableSubnetwork(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - compute.UsableSubnetworksAggregatedList.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list_usable(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.UsableSubnetwork) for i in results) - - pages = list(client.list_usable(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchSubnetworkRequest, + compute.InsertSubnetworkRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_insert_unary_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} request_init["subnetwork_resource"] = { "creation_timestamp": "creation_timestamp_value", "description": "description_value", @@ -3304,41 +3225,20 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchSubnetworkRequest): +def test_insert_unary_rest_required_fields( + request_type=compute.InsertSubnetworkRequest, +): transport_class = transports.SubnetworksRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["subnetwork"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -3350,25 +3250,19 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchSubnetworkRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["subnetwork"] = "subnetwork_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "drain_timeout_seconds", - "request_id", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3376,8 +3270,6 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchSubnetworkRe assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "subnetwork" in jsonified_request - assert jsonified_request["subnetwork"] == "subnetwork_value" client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3397,7 +3289,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchSubnetworkRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -3409,31 +3301,25 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchSubnetworkRe response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.insert_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_insert_unary_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "drainTimeoutSeconds", - "requestId", - ) - ) + set(("requestId",)) & set( ( "project", "region", - "subnetwork", "subnetworkResource", ) ) @@ -3441,7 +3327,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_insert_unary_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3454,9 +3340,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_patch" + transports.SubnetworksRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_patch" + transports.SubnetworksRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3473,7 +3359,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchSubnetworkRequest() + request = compute.InsertSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3481,7 +3367,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.insert_unary( request, metadata=[ ("key", "val"), @@ -3493,8 +3379,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchSubnetworkRequest +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertSubnetworkRequest ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3502,7 +3388,7 @@ def test_patch_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} request_init["subnetwork_resource"] = { "creation_timestamp": "creation_timestamp_value", "description": "description_value", @@ -3549,10 +3435,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.insert_unary(request) -def test_patch_unary_rest_flattened(): +def test_insert_unary_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3564,17 +3450,12 @@ def test_patch_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "subnetwork": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - subnetwork="subnetwork_value", subnetwork_resource=compute.Subnetwork( creation_timestamp="creation_timestamp_value" ), @@ -3589,20 +3470,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.insert_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_insert_unary_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3611,18 +3492,17 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchSubnetworkRequest(), + client.insert_unary( + compute.InsertSubnetworkRequest(), project="project_value", region="region_value", - subnetwork="subnetwork_value", subnetwork_resource=compute.Subnetwork( creation_timestamp="creation_timestamp_value" ), ) -def test_patch_unary_rest_error(): +def test_insert_unary_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3631,130 +3511,2033 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetIamPolicySubnetworkRequest, + compute.ListSubnetworksRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_list_rest(request_type): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} - request_init["region_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SubnetworkList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SubnetworkList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListSubnetworksRequest): + transport_class = transports.SubnetworksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.SubnetworkList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SubnetworkList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SubnetworksRestInterceptor(), + ) + client = SubnetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SubnetworksRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.SubnetworksRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SubnetworkList.to_json( + compute.SubnetworkList() + ) + + request = compute.ListSubnetworksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SubnetworkList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListSubnetworksRequest +): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.SubnetworkList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.SubnetworkList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListSubnetworksRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.SubnetworkList( + items=[ + compute.Subnetwork(), + compute.Subnetwork(), + compute.Subnetwork(), + ], + next_page_token="abc", + ), + compute.SubnetworkList( + items=[], + next_page_token="def", + ), + compute.SubnetworkList( + items=[ + compute.Subnetwork(), + ], + next_page_token="ghi", + ), + compute.SubnetworkList( + items=[ + compute.Subnetwork(), + compute.Subnetwork(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.SubnetworkList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.Subnetwork) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListUsableSubnetworksRequest, + dict, + ], +) +def test_list_usable_rest(request_type): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UsableSubnetworksAggregatedList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UsableSubnetworksAggregatedList.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list_usable(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListUsablePager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_usable_rest_required_fields( + request_type=compute.ListUsableSubnetworksRequest, +): + transport_class = transports.SubnetworksRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_usable._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list_usable._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.UsableSubnetworksAggregatedList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UsableSubnetworksAggregatedList.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list_usable(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_usable_rest_unset_required_fields(): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list_usable._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_usable_rest_interceptors(null_interceptor): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SubnetworksRestInterceptor(), + ) + client = SubnetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SubnetworksRestInterceptor, "post_list_usable" + ) as post, mock.patch.object( + transports.SubnetworksRestInterceptor, "pre_list_usable" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.UsableSubnetworksAggregatedList.to_json( + compute.UsableSubnetworksAggregatedList() + ) + + request = compute.ListUsableSubnetworksRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.UsableSubnetworksAggregatedList + + client.list_usable( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_usable_rest_bad_request( + transport: str = "rest", request_type=compute.ListUsableSubnetworksRequest +): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_usable(request) + + +def test_list_usable_rest_flattened(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UsableSubnetworksAggregatedList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UsableSubnetworksAggregatedList.to_json( + return_value + ) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_usable(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/aggregated/subnetworks/listUsable" + % client.transport._host, + args[1], + ) + + +def test_list_usable_rest_flattened_error(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_usable( + compute.ListUsableSubnetworksRequest(), + project="project_value", + ) + + +def test_list_usable_rest_pager(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.UsableSubnetworksAggregatedList( + items=[ + compute.UsableSubnetwork(), + compute.UsableSubnetwork(), + compute.UsableSubnetwork(), + ], + next_page_token="abc", + ), + compute.UsableSubnetworksAggregatedList( + items=[], + next_page_token="def", + ), + compute.UsableSubnetworksAggregatedList( + items=[ + compute.UsableSubnetwork(), + ], + next_page_token="ghi", + ), + compute.UsableSubnetworksAggregatedList( + items=[ + compute.UsableSubnetwork(), + compute.UsableSubnetwork(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + compute.UsableSubnetworksAggregatedList.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list_usable(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.UsableSubnetwork) for i in results) + + pages = list(client.list_usable(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchSubnetworkRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetwork_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_flow_logs": True, + "external_ipv6_prefix": "external_ipv6_prefix_value", + "fingerprint": "fingerprint_value", + "gateway_address": "gateway_address_value", + "id": 205, + "internal_ipv6_prefix": "internal_ipv6_prefix_value", + "ip_cidr_range": "ip_cidr_range_value", + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_cidr_range": "ipv6_cidr_range_value", + "kind": "kind_value", + "log_config": { + "aggregation_interval": "aggregation_interval_value", + "enable": True, + "filter_expr": "filter_expr_value", + "flow_sampling": 0.1394, + "metadata": "metadata_value", + "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], + }, + "name": "name_value", + "network": "network_value", + "private_ip_google_access": True, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "purpose": "purpose_value", + "region": "region_value", + "role": "role_value", + "secondary_ip_ranges": [ + {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} + ], + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchSubnetworkRequest): + transport_class = transports.SubnetworksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["subnetwork"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["subnetwork"] = "subnetwork_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "drain_timeout_seconds", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "subnetwork" in jsonified_request + assert jsonified_request["subnetwork"] == "subnetwork_value" + + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "drainTimeoutSeconds", + "requestId", + ) + ) + & set( + ( + "project", + "region", + "subnetwork", + "subnetworkResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SubnetworksRestInterceptor(), + ) + client = SubnetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SubnetworksRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.SubnetworksRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchSubnetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchSubnetworkRequest +): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetwork_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_flow_logs": True, + "external_ipv6_prefix": "external_ipv6_prefix_value", + "fingerprint": "fingerprint_value", + "gateway_address": "gateway_address_value", + "id": 205, + "internal_ipv6_prefix": "internal_ipv6_prefix_value", + "ip_cidr_range": "ip_cidr_range_value", + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_cidr_range": "ipv6_cidr_range_value", + "kind": "kind_value", + "log_config": { + "aggregation_interval": "aggregation_interval_value", + "enable": True, + "filter_expr": "filter_expr_value", + "flow_sampling": 0.1394, + "metadata": "metadata_value", + "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], + }, + "name": "name_value", + "network": "network_value", + "private_ip_google_access": True, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "purpose": "purpose_value", + "region": "region_value", + "role": "role_value", + "secondary_ip_ranges": [ + {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} + ], + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "subnetwork": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + subnetwork="subnetwork_value", + subnetwork_resource=compute.Subnetwork( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchSubnetworkRequest(), + project="project_value", + region="region_value", + subnetwork="subnetwork_value", + subnetwork_resource=compute.Subnetwork( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_patch_rest_error(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchSubnetworkRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetwork_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_flow_logs": True, + "external_ipv6_prefix": "external_ipv6_prefix_value", + "fingerprint": "fingerprint_value", + "gateway_address": "gateway_address_value", + "id": 205, + "internal_ipv6_prefix": "internal_ipv6_prefix_value", + "ip_cidr_range": "ip_cidr_range_value", + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_cidr_range": "ipv6_cidr_range_value", + "kind": "kind_value", + "log_config": { + "aggregation_interval": "aggregation_interval_value", + "enable": True, + "filter_expr": "filter_expr_value", + "flow_sampling": 0.1394, + "metadata": "metadata_value", + "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], + }, + "name": "name_value", + "network": "network_value", + "private_ip_google_access": True, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "purpose": "purpose_value", + "region": "region_value", + "role": "role_value", + "secondary_ip_ranges": [ + {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} + ], + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields(request_type=compute.PatchSubnetworkRequest): + transport_class = transports.SubnetworksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["subnetwork"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["subnetwork"] = "subnetwork_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "drain_timeout_seconds", + "request_id", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "subnetwork" in jsonified_request + assert jsonified_request["subnetwork"] == "subnetwork_value" + + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "drainTimeoutSeconds", + "requestId", + ) + ) + & set( + ( + "project", + "region", + "subnetwork", + "subnetworkResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SubnetworksRestInterceptor(), + ) + client = SubnetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SubnetworksRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.SubnetworksRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchSubnetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchSubnetworkRequest +): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetwork_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "enable_flow_logs": True, + "external_ipv6_prefix": "external_ipv6_prefix_value", + "fingerprint": "fingerprint_value", + "gateway_address": "gateway_address_value", + "id": 205, + "internal_ipv6_prefix": "internal_ipv6_prefix_value", + "ip_cidr_range": "ip_cidr_range_value", + "ipv6_access_type": "ipv6_access_type_value", + "ipv6_cidr_range": "ipv6_cidr_range_value", + "kind": "kind_value", + "log_config": { + "aggregation_interval": "aggregation_interval_value", + "enable": True, + "filter_expr": "filter_expr_value", + "flow_sampling": 0.1394, + "metadata": "metadata_value", + "metadata_fields": ["metadata_fields_value_1", "metadata_fields_value_2"], + }, + "name": "name_value", + "network": "network_value", + "private_ip_google_access": True, + "private_ipv6_google_access": "private_ipv6_google_access_value", + "purpose": "purpose_value", + "region": "region_value", + "role": "role_value", + "secondary_ip_ranges": [ + {"ip_cidr_range": "ip_cidr_range_value", "range_name": "range_name_value"} + ], + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "state": "state_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "subnetwork": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + subnetwork="subnetwork_value", + subnetwork_resource=compute.Subnetwork( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchSubnetworkRequest(), + project="project_value", + region="region_value", + subnetwork="subnetwork_value", + subnetwork_resource=compute.Subnetwork( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_patch_unary_rest_error(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicySubnetworkRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy( + etag="etag_value", + iam_owned=True, + version=774, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Policy) + assert response.etag == "etag_value" + assert response.iam_owned is True + assert response.version == 774 + + +def test_set_iam_policy_rest_required_fields( + request_type=compute.SetIamPolicySubnetworkRequest, +): + transport_class = transports.SubnetworksRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "regionSetPolicyRequestResource", + "resource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SubnetworksRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SubnetworksRestInterceptor(), + ) + client = SubnetworksClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SubnetworksRestInterceptor, "post_set_iam_policy" + ) as post, mock.patch.object( + transports.SubnetworksRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Policy.to_json(compute.Policy()) + + request = compute.SetIamPolicySubnetworkRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Policy + + client.set_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetIamPolicySubnetworkRequest +): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_policy_request_resource"] = { + "bindings": [ + { + "binding_id": "binding_id_value", + "condition": { + "description": "description_value", + "expression": "expression_value", + "location": "location_value", + "title": "title_value", + }, + "members": ["members_value_1", "members_value_2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value_1", + "exempted_members_value_2", + ], + "service": "service_value", + } + ], + "bindings": {}, + "etag": "etag_value", + "iam_owned": True, + "rules": [ + { + "action": "action_value", + "conditions": [ + { + "iam": "iam_value", + "op": "op_value", + "svc": "svc_value", + "sys": "sys_value", + "values": ["values_value_1", "values_value_2"], + } + ], + "description": "description_value", + "ins": ["ins_value_1", "ins_value_2"], + "log_configs": [ + { + "cloud_audit": { + "authorization_logging_options": { + "permission_type": "permission_type_value" + }, + "log_name": "log_name_value", + }, + "counter": { + "custom_fields": [ + {"name": "name_value", "value": "value_value"} + ], + "field": "field_value", + "metric": "metric_value", + }, + "data_access": {"log_mode": "log_mode_value"}, + } + ], + "not_ins": ["not_ins_value_1", "not_ins_value_2"], + "permissions": ["permissions_value_1", "permissions_value_2"], + } + ], + "version": 774, + }, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + resource="resource_value", + region_set_policy_request_resource=compute.RegionSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Policy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + compute.SetIamPolicySubnetworkRequest(), + project="project_value", + region="region_value", + resource="resource_value", + region_set_policy_request_resource=compute.RegionSetPolicyRequest( + bindings=[compute.Binding(binding_id="binding_id_value")] + ), + ) + + +def test_set_iam_policy_rest_error(): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetPrivateIpGoogleAccessSubnetworkRequest, + dict, + ], +) +def test_set_private_ip_google_access_rest(request_type): + client = SubnetworksClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetworks_set_private_ip_google_access_request_resource"] = { + "private_ip_google_access": True } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy( - etag="etag_value", - iam_owned=True, - version=774, + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_private_ip_google_access(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Policy) - assert response.etag == "etag_value" - assert response.iam_owned is True - assert response.version == 774 + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_set_iam_policy_rest_required_fields( - request_type=compute.SetIamPolicySubnetworkRequest, +def test_set_private_ip_google_access_rest_required_fields( + request_type=compute.SetPrivateIpGoogleAccessSubnetworkRequest, ): transport_class = transports.SubnetworksRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["resource"] = "" + request_init["subnetwork"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -3766,18 +5549,20 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_private_ip_google_access._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["resource"] = "resource_value" + jsonified_request["subnetwork"] = "subnetwork_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).set_private_ip_google_access._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3785,8 +5570,8 @@ def test_set_iam_policy_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "subnetwork" in jsonified_request + assert jsonified_request["subnetwork"] == "subnetwork_value" client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3795,7 +5580,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -3814,38 +5599,38 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.set_private_ip_google_access(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_set_private_ip_google_access_rest_unset_required_fields(): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.set_private_ip_google_access._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "region", - "regionSetPolicyRequestResource", - "resource", + "subnetwork", + "subnetworksSetPrivateIpGoogleAccessRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_set_private_ip_google_access_rest_interceptors(null_interceptor): transport = transports.SubnetworksRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3858,9 +5643,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SubnetworksRestInterceptor, "post_set_iam_policy" + transports.SubnetworksRestInterceptor, "post_set_private_ip_google_access" ) as post, mock.patch.object( - transports.SubnetworksRestInterceptor, "pre_set_iam_policy" + transports.SubnetworksRestInterceptor, "pre_set_private_ip_google_access" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3875,17 +5660,17 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Policy.to_json(compute.Policy()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetIamPolicySubnetworkRequest() + request = compute.SetPrivateIpGoogleAccessSubnetworkRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Operation - client.set_iam_policy( + client.set_private_ip_google_access( request, metadata=[ ("key", "val"), @@ -3897,8 +5682,9 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=compute.SetIamPolicySubnetworkRequest +def test_set_private_ip_google_access_rest_bad_request( + transport: str = "rest", + request_type=compute.SetPrivateIpGoogleAccessSubnetworkRequest, ): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3906,83 +5692,9 @@ def test_set_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} - request_init["region_set_policy_request_resource"] = { - "bindings": [ - { - "binding_id": "binding_id_value", - "condition": { - "description": "description_value", - "expression": "expression_value", - "location": "location_value", - "title": "title_value", - }, - "members": ["members_value_1", "members_value_2"], - "role": "role_value", - } - ], - "etag": "etag_value", - "policy": { - "audit_configs": [ - { - "audit_log_configs": [ - { - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "ignore_child_exemptions": True, - "log_type": "log_type_value", - } - ], - "exempted_members": [ - "exempted_members_value_1", - "exempted_members_value_2", - ], - "service": "service_value", - } - ], - "bindings": {}, - "etag": "etag_value", - "iam_owned": True, - "rules": [ - { - "action": "action_value", - "conditions": [ - { - "iam": "iam_value", - "op": "op_value", - "svc": "svc_value", - "sys": "sys_value", - "values": ["values_value_1", "values_value_2"], - } - ], - "description": "description_value", - "ins": ["ins_value_1", "ins_value_2"], - "log_configs": [ - { - "cloud_audit": { - "authorization_logging_options": { - "permission_type": "permission_type_value" - }, - "log_name": "log_name_value", - }, - "counter": { - "custom_fields": [ - {"name": "name_value", "value": "value_value"} - ], - "field": "field_value", - "metric": "metric_value", - }, - "data_access": {"log_mode": "log_mode_value"}, - } - ], - "not_ins": ["not_ins_value_1", "not_ins_value_2"], - "permissions": ["permissions_value_1", "permissions_value_2"], - } - ], - "version": 774, - }, + request_init = {"project": "sample1", "region": "sample2", "subnetwork": "sample3"} + request_init["subnetworks_set_private_ip_google_access_request_resource"] = { + "private_ip_google_access": True } request = request_type(request_init) @@ -3995,10 +5707,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.set_private_ip_google_access(request) -def test_set_iam_policy_rest_flattened(): +def test_set_private_ip_google_access_rest_flattened(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -4007,22 +5719,22 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Policy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { "project": "sample1", "region": "sample2", - "resource": "sample3", + "subnetwork": "sample3", } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - resource="resource_value", - region_set_policy_request_resource=compute.RegionSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + subnetwork="subnetwork_value", + subnetworks_set_private_ip_google_access_request_resource=compute.SubnetworksSetPrivateIpGoogleAccessRequest( + private_ip_google_access=True ), ) mock_args.update(sample_request) @@ -4030,25 +5742,25 @@ def test_set_iam_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Policy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.set_private_ip_google_access(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{resource}/setIamPolicy" + "%s/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_set_private_ip_google_access_rest_flattened_error(transport: str = "rest"): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4057,18 +5769,18 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - compute.SetIamPolicySubnetworkRequest(), + client.set_private_ip_google_access( + compute.SetPrivateIpGoogleAccessSubnetworkRequest(), project="project_value", region="region_value", - resource="resource_value", - region_set_policy_request_resource=compute.RegionSetPolicyRequest( - bindings=[compute.Binding(binding_id="binding_id_value")] + subnetwork="subnetwork_value", + subnetworks_set_private_ip_google_access_request_resource=compute.SubnetworksSetPrivateIpGoogleAccessRequest( + private_ip_google_access=True ), ) -def test_set_iam_policy_rest_error(): +def test_set_private_ip_google_access_rest_error(): client = SubnetworksClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -4132,28 +5844,6 @@ def test_set_private_ip_google_access_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_private_ip_google_access_unary_rest_required_fields( @@ -4786,6 +6476,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = SubnetworksClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_subnetworks_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4828,6 +6531,14 @@ def test_subnetworks_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_subnetworks_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_grpc_proxies.py b/tests/unit/gapic/compute_v1/test_target_grpc_proxies.py index 625fd1c9e..be381d35b 100644 --- a/tests/unit/gapic/compute_v1/test_target_grpc_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_grpc_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_target_grpc_proxies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -589,10 +591,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -617,9 +619,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetGrpcProxyRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteTargetGrpcProxyRequest): transport_class = transports.TargetGrpcProxiesRestTransport request_init = {} @@ -686,14 +686,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -711,7 +711,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -751,7 +751,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -763,7 +763,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteTargetGrpcProxyRequest ): client = TargetGrpcProxiesClient( @@ -784,10 +784,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -816,7 +816,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -829,7 +829,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -838,14 +838,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteTargetGrpcProxyRequest(), project="project_value", target_grpc_proxy="target_grpc_proxy_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -854,11 +854,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetGrpcProxyRequest, + compute.DeleteTargetGrpcProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -871,42 +871,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetGrpcProxy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - self_link_with_id="self_link_with_id_value", - url_map="url_map_value", - validate_for_proxyless=True, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetGrpcProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetGrpcProxy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.self_link == "self_link_value" - assert response.self_link_with_id == "self_link_with_id_value" - assert response.url_map == "url_map_value" - assert response.validate_for_proxyless is True + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetTargetGrpcProxyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetGrpcProxyRequest, +): transport_class = transports.TargetGrpcProxiesRestTransport request_init = {} @@ -923,7 +927,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetGrpcProxyRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -933,7 +937,9 @@ def test_get_rest_required_fields(request_type=compute.GetTargetGrpcProxyRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -949,7 +955,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetGrpcProxyRequest request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetGrpcProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -960,32 +966,32 @@ def test_get_rest_required_fields(request_type=compute.GetTargetGrpcProxyRequest # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetGrpcProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -996,7 +1002,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1009,9 +1015,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetGrpcProxiesRestInterceptor, "post_get" + transports.TargetGrpcProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetGrpcProxiesRestInterceptor, "pre_get" + transports.TargetGrpcProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1026,19 +1032,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetGrpcProxy.to_json( - compute.TargetGrpcProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetGrpcProxyRequest() + request = compute.DeleteTargetGrpcProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetGrpcProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1050,8 +1054,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetGrpcProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetGrpcProxyRequest ): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1071,10 +1075,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1083,7 +1087,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetGrpcProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "target_grpc_proxy": "sample2"} @@ -1098,12 +1102,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetGrpcProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1116,7 +1120,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1125,14 +1129,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetGrpcProxyRequest(), + client.delete_unary( + compute.DeleteTargetGrpcProxyRequest(), project="project_value", target_grpc_proxy="target_grpc_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1141,101 +1145,64 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertTargetGrpcProxyRequest, + compute.GetTargetGrpcProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_grpc_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "url_map": "url_map_value", - "validate_for_proxyless": True, - } + request_init = {"project": "sample1", "target_grpc_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetGrpcProxy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + self_link_with_id="self_link_with_id_value", + url_map="url_map_value", + validate_for_proxyless=True, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetGrpcProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetGrpcProxy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.self_link_with_id == "self_link_with_id_value" + assert response.url_map == "url_map_value" + assert response.validate_for_proxyless is True -def test_insert_unary_rest_required_fields( - request_type=compute.InsertTargetGrpcProxyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetTargetGrpcProxyRequest): transport_class = transports.TargetGrpcProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_grpc_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1247,23 +1214,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetGrpcProxy"] = "target_grpc_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetGrpcProxy" in jsonified_request + assert jsonified_request["targetGrpcProxy"] == "target_grpc_proxy_value" client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1272,7 +1240,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetGrpcProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1283,44 +1251,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetGrpcProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "targetGrpcProxyResource", + "targetGrpcProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1333,9 +1300,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetGrpcProxiesRestInterceptor, "post_insert" + transports.TargetGrpcProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetGrpcProxiesRestInterceptor, "pre_insert" + transports.TargetGrpcProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1350,17 +1317,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetGrpcProxy.to_json( + compute.TargetGrpcProxy() + ) - request = compute.InsertTargetGrpcProxyRequest() + request = compute.GetTargetGrpcProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetGrpcProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1372,8 +1341,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertTargetGrpcProxyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetGrpcProxyRequest ): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1381,19 +1350,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_grpc_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "self_link": "self_link_value", - "self_link_with_id": "self_link_with_id_value", - "url_map": "url_map_value", - "validate_for_proxyless": True, - } + request_init = {"project": "sample1", "target_grpc_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1405,10 +1362,658 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetGrpcProxy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_grpc_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_grpc_proxy="target_grpc_proxy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetGrpcProxy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetGrpcProxies/{target_grpc_proxy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetTargetGrpcProxyRequest(), + project="project_value", + target_grpc_proxy="target_grpc_proxy_value", + ) + + +def test_get_rest_error(): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetGrpcProxyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_grpc_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "url_map": "url_map_value", + "validate_for_proxyless": True, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertTargetGrpcProxyRequest): + transport_class = transports.TargetGrpcProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.TargetGrpcProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetGrpcProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.TargetGrpcProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetGrpcProxiesRestInterceptor(), + ) + client = TargetGrpcProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetGrpcProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetGrpcProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetGrpcProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetGrpcProxyRequest +): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_grpc_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "url_map": "url_map_value", + "validate_for_proxyless": True, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_grpc_proxy_resource=compute.TargetGrpcProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetGrpcProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertTargetGrpcProxyRequest(), + project="project_value", + target_grpc_proxy_resource=compute.TargetGrpcProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetGrpcProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_grpc_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "url_map": "url_map_value", + "validate_for_proxyless": True, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertTargetGrpcProxyRequest, +): + transport_class = transports.TargetGrpcProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.TargetGrpcProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetGrpcProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.TargetGrpcProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetGrpcProxiesRestInterceptor(), + ) + client = TargetGrpcProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetGrpcProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetGrpcProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetGrpcProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetGrpcProxyRequest +): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_grpc_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "url_map": "url_map_value", + "validate_for_proxyless": True, + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1425,21 +2030,306 @@ def test_insert_unary_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", - target_grpc_proxy_resource=compute.TargetGrpcProxy( - creation_timestamp="creation_timestamp_value" - ), + target_grpc_proxy_resource=compute.TargetGrpcProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetGrpcProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertTargetGrpcProxyRequest(), + project="project_value", + target_grpc_proxy_resource=compute.TargetGrpcProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListTargetGrpcProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetGrpcProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetGrpcProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListTargetGrpcProxiesRequest): + transport_class = transports.TargetGrpcProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetGrpcProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetGrpcProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.TargetGrpcProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.TargetGrpcProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetGrpcProxiesRestInterceptor(), + ) + client = TargetGrpcProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetGrpcProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.TargetGrpcProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetGrpcProxyList.to_json( + compute.TargetGrpcProxyList() + ) + + request = compute.ListTargetGrpcProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetGrpcProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListTargetGrpcProxiesRequest +): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = TargetGrpcProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetGrpcProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetGrpcProxyList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1452,7 +2342,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1461,69 +2351,170 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertTargetGrpcProxyRequest(), + client.list( + compute.ListTargetGrpcProxiesRequest(), project="project_value", - target_grpc_proxy_resource=compute.TargetGrpcProxy( - creation_timestamp="creation_timestamp_value" - ), ) -def test_insert_unary_rest_error(): +def test_list_rest_pager(transport: str = "rest"): client = TargetGrpcProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetGrpcProxyList( + items=[ + compute.TargetGrpcProxy(), + compute.TargetGrpcProxy(), + compute.TargetGrpcProxy(), + ], + next_page_token="abc", + ), + compute.TargetGrpcProxyList( + items=[], + next_page_token="def", + ), + compute.TargetGrpcProxyList( + items=[ + compute.TargetGrpcProxy(), + ], + next_page_token="ghi", + ), + compute.TargetGrpcProxyList( + items=[ + compute.TargetGrpcProxy(), + compute.TargetGrpcProxy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetGrpcProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetGrpcProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.ListTargetGrpcProxiesRequest, + compute.PatchTargetGrpcProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_rest(request_type): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_grpc_proxy": "sample2"} + request_init["target_grpc_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "url_map": "url_map_value", + "validate_for_proxyless": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetGrpcProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetGrpcProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListTargetGrpcProxiesRequest): +def test_patch_rest_required_fields(request_type=compute.PatchTargetGrpcProxyRequest): transport_class = transports.TargetGrpcProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_grpc_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1535,31 +2526,26 @@ def test_list_rest_required_fields(request_type=compute.ListTargetGrpcProxiesReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetGrpcProxy"] = "target_grpc_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetGrpcProxy" in jsonified_request + assert jsonified_request["targetGrpcProxy"] == "target_grpc_proxy_value" client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1568,7 +2554,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetGrpcProxiesReq request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetGrpcProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1579,46 +2565,45 @@ def test_list_rest_required_fields(request_type=compute.ListTargetGrpcProxiesReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetGrpcProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_rest_unset_required_fields(): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "targetGrpcProxy", + "targetGrpcProxyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_rest_interceptors(null_interceptor): transport = transports.TargetGrpcProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1631,9 +2616,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetGrpcProxiesRestInterceptor, "post_list" + transports.TargetGrpcProxiesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.TargetGrpcProxiesRestInterceptor, "pre_list" + transports.TargetGrpcProxiesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1648,19 +2633,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetGrpcProxyList.to_json( - compute.TargetGrpcProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListTargetGrpcProxiesRequest() + request = compute.PatchTargetGrpcProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetGrpcProxyList + post.return_value = compute.Operation - client.list( + client.patch( request, metadata=[ ("key", "val"), @@ -1672,8 +2655,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListTargetGrpcProxiesRequest +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchTargetGrpcProxyRequest ): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1681,7 +2664,19 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_grpc_proxy": "sample2"} + request_init["target_grpc_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "self_link": "self_link_value", + "self_link_with_id": "self_link_with_id_value", + "url_map": "url_map_value", + "validate_for_proxyless": True, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1693,10 +2688,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch(request) -def test_list_rest_flattened(): +def test_patch_rest_flattened(): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1705,39 +2700,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetGrpcProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_grpc_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + target_grpc_proxy="target_grpc_proxy_value", + target_grpc_proxy_resource=compute.TargetGrpcProxy( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetGrpcProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetGrpcProxies" + "%s/compute/v1/projects/{project}/global/targetGrpcProxies/{target_grpc_proxy}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = TargetGrpcProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1746,72 +2745,21 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListTargetGrpcProxiesRequest(), + client.patch( + compute.PatchTargetGrpcProxyRequest(), project="project_value", + target_grpc_proxy="target_grpc_proxy_value", + target_grpc_proxy_resource=compute.TargetGrpcProxy( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_rest_error(): client = TargetGrpcProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetGrpcProxyList( - items=[ - compute.TargetGrpcProxy(), - compute.TargetGrpcProxy(), - compute.TargetGrpcProxy(), - ], - next_page_token="abc", - ), - compute.TargetGrpcProxyList( - items=[], - next_page_token="def", - ), - compute.TargetGrpcProxyList( - items=[ - compute.TargetGrpcProxy(), - ], - next_page_token="ghi", - ), - compute.TargetGrpcProxyList( - items=[ - compute.TargetGrpcProxy(), - compute.TargetGrpcProxy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.TargetGrpcProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetGrpcProxy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -1880,28 +2828,6 @@ def test_patch_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_patch_unary_rest_required_fields( @@ -2233,6 +3159,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetGrpcProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_grpc_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2268,6 +3207,14 @@ def test_target_grpc_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_grpc_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_http_proxies.py b/tests/unit/gapic/compute_v1/test_target_http_proxies.py index 20857075e..ea20d0c42 100644 --- a/tests/unit/gapic/compute_v1/test_target_http_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_http_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -904,7 +906,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -948,10 +950,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -976,9 +978,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetHttpProxyRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteTargetHttpProxyRequest): transport_class = transports.TargetHttpProxiesRestTransport request_init = {} @@ -1045,14 +1045,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1070,7 +1070,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1110,7 +1110,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1122,7 +1122,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteTargetHttpProxyRequest ): client = TargetHttpProxiesClient( @@ -1143,10 +1143,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1175,7 +1175,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1188,7 +1188,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1197,14 +1197,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteTargetHttpProxyRequest(), project="project_value", target_http_proxy="target_http_proxy_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1213,11 +1213,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetHttpProxyRequest, + compute.DeleteTargetHttpProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1230,42 +1230,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - proxy_bind=True, + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - url_map="url_map_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetHttpProxy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.proxy_bind is True - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.url_map == "url_map_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetTargetHttpProxyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetHttpProxyRequest, +): transport_class = transports.TargetHttpProxiesRestTransport request_init = {} @@ -1282,7 +1286,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpProxyRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1292,7 +1296,9 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpProxyRequest unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1308,7 +1314,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpProxyRequest request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1319,32 +1325,32 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpProxyRequest # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1355,7 +1361,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1368,9 +1374,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "post_get" + transports.TargetHttpProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "pre_get" + transports.TargetHttpProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1385,19 +1391,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpProxy.to_json( - compute.TargetHttpProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetHttpProxyRequest() + request = compute.DeleteTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1409,8 +1413,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetHttpProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetHttpProxyRequest ): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1430,10 +1434,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1442,7 +1446,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "target_http_proxy": "sample2"} @@ -1457,12 +1461,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1475,7 +1479,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1484,14 +1488,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetHttpProxyRequest(), + client.delete_unary( + compute.DeleteTargetHttpProxyRequest(), project="project_value", target_http_proxy="target_http_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1500,101 +1504,64 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertTargetHttpProxyRequest, + compute.GetTargetHttpProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_http_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "region": "region_value", - "self_link": "self_link_value", - "url_map": "url_map_value", - } + request_init = {"project": "sample1", "target_http_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetHttpProxy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + proxy_bind=True, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + url_map="url_map_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetHttpProxy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.proxy_bind is True assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.url_map == "url_map_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertTargetHttpProxyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetTargetHttpProxyRequest): transport_class = transports.TargetHttpProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_http_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1606,23 +1573,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetHttpProxy"] = "target_http_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetHttpProxy" in jsonified_request + assert jsonified_request["targetHttpProxy"] == "target_http_proxy_value" client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1631,7 +1599,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1642,44 +1610,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "targetHttpProxyResource", + "targetHttpProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1692,9 +1659,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "post_insert" + transports.TargetHttpProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "pre_insert" + transports.TargetHttpProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1709,17 +1676,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetHttpProxy.to_json( + compute.TargetHttpProxy() + ) - request = compute.InsertTargetHttpProxyRequest() + request = compute.GetTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetHttpProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1731,8 +1700,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertTargetHttpProxyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetHttpProxyRequest ): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1740,19 +1709,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_http_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "region": "region_value", - "self_link": "self_link_value", - "url_map": "url_map_value", - } + request_init = {"project": "sample1", "target_http_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1764,10 +1721,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1776,16 +1733,1343 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpProxy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_http_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - target_http_proxy_resource=compute.TargetHttpProxy( - creation_timestamp="creation_timestamp_value" + target_http_proxy="target_http_proxy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpProxies/{target_http_proxy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetTargetHttpProxyRequest(), + project="project_value", + target_http_proxy="target_http_proxy_value", + ) + + +def test_get_rest_error(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetHttpProxyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertTargetHttpProxyRequest): + transport_class = transports.TargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpProxiesRestInterceptor(), + ) + client = TargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetHttpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetHttpProxyRequest +): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertTargetHttpProxyRequest(), + project="project_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetHttpProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertTargetHttpProxyRequest, +): + transport_class = transports.TargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpProxiesRestInterceptor(), + ) + client = TargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetHttpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetHttpProxyRequest +): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertTargetHttpProxyRequest(), + project="project_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListTargetHttpProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListTargetHttpProxiesRequest): + transport_class = transports.TargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpProxiesRestInterceptor(), + ) + client = TargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetHttpProxyList.to_json( + compute.TargetHttpProxyList() + ) + + request = compute.ListTargetHttpProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetHttpProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListTargetHttpProxiesRequest +): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpProxyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpProxies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListTargetHttpProxiesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetHttpProxyList( + items=[ + compute.TargetHttpProxy(), + compute.TargetHttpProxy(), + compute.TargetHttpProxy(), + ], + next_page_token="abc", + ), + compute.TargetHttpProxyList( + items=[], + next_page_token="def", + ), + compute.TargetHttpProxyList( + items=[ + compute.TargetHttpProxy(), + ], + next_page_token="ghi", + ), + compute.TargetHttpProxyList( + items=[ + compute.TargetHttpProxy(), + compute.TargetHttpProxy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetHttpProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetHttpProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchTargetHttpProxyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_http_proxy": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchTargetHttpProxyRequest): + transport_class = transports.TargetHttpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_http_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetHttpProxy"] = "target_http_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetHttpProxy" in jsonified_request + assert jsonified_request["targetHttpProxy"] == "target_http_proxy_value" + + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpProxy", + "targetHttpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.TargetHttpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpProxiesRestInterceptor(), + ) + client = TargetHttpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.TargetHttpProxiesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchTargetHttpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchTargetHttpProxyRequest +): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_http_proxy": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = TargetHttpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_http_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_http_proxy="target_http_proxy_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" ), ) mock_args.update(sample_request) @@ -1798,20 +3082,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.patch(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpProxies" + "%s/compute/v1/projects/{project}/global/targetHttpProxies/{target_http_proxy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_patch_rest_flattened_error(transport: str = "rest"): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1820,16 +3104,17 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertTargetHttpProxyRequest(), + client.patch( + compute.PatchTargetHttpProxyRequest(), project="project_value", + target_http_proxy="target_http_proxy_value", target_http_proxy_resource=compute.TargetHttpProxy( creation_timestamp="creation_timestamp_value" ), ) -def test_insert_unary_rest_error(): +def test_patch_rest_error(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1838,51 +3123,80 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListTargetHttpProxiesRequest, + compute.PatchTargetHttpProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_patch_unary_rest(request_type): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_http_proxy": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListTargetHttpProxiesRequest): +def test_patch_unary_rest_required_fields( + request_type=compute.PatchTargetHttpProxyRequest, +): transport_class = transports.TargetHttpProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_http_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1894,31 +3208,26 @@ def test_list_rest_required_fields(request_type=compute.ListTargetHttpProxiesReq unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetHttpProxy"] = "target_http_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).patch._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetHttpProxy" in jsonified_request + assert jsonified_request["targetHttpProxy"] == "target_http_proxy_value" client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1927,7 +3236,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetHttpProxiesReq request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1938,46 +3247,45 @@ def test_list_rest_required_fields(request_type=compute.ListTargetHttpProxiesReq # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.patch_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_patch_unary_rest_unset_required_fields(): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.patch._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "targetHttpProxy", + "targetHttpProxyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_patch_unary_rest_interceptors(null_interceptor): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1990,9 +3298,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "post_list" + transports.TargetHttpProxiesRestInterceptor, "post_patch" ) as post, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "pre_list" + transports.TargetHttpProxiesRestInterceptor, "pre_patch" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2007,19 +3315,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpProxyList.to_json( - compute.TargetHttpProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListTargetHttpProxiesRequest() + request = compute.PatchTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxyList + post.return_value = compute.Operation - client.list( + client.patch_unary( request, metadata=[ ("key", "val"), @@ -2031,8 +3337,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListTargetHttpProxiesRequest +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchTargetHttpProxyRequest ): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2040,7 +3346,19 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_http_proxy": "sample2"} + request_init["target_http_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "region": "region_value", + "self_link": "self_link_value", + "url_map": "url_map_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2052,10 +3370,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2064,39 +3382,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_http_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + target_http_proxy="target_http_proxy_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpProxies" + "%s/compute/v1/projects/{project}/global/targetHttpProxies/{target_http_proxy}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2105,81 +3427,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListTargetHttpProxiesRequest(), + client.patch_unary( + compute.PatchTargetHttpProxyRequest(), project="project_value", + target_http_proxy="target_http_proxy_value", + target_http_proxy_resource=compute.TargetHttpProxy( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = TargetHttpProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetHttpProxyList( - items=[ - compute.TargetHttpProxy(), - compute.TargetHttpProxy(), - compute.TargetHttpProxy(), - ], - next_page_token="abc", - ), - compute.TargetHttpProxyList( - items=[], - next_page_token="def", - ), - compute.TargetHttpProxyList( - items=[ - compute.TargetHttpProxy(), - ], - next_page_token="ghi", - ), - compute.TargetHttpProxyList( - items=[ - compute.TargetHttpProxy(), - compute.TargetHttpProxy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.TargetHttpProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetHttpProxy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchTargetHttpProxyRequest, + compute.SetUrlMapTargetHttpProxyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_set_url_map_rest(request_type): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2187,18 +3458,7 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_http_proxy": "sample2"} - request_init["target_http_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "region": "region_value", - "self_link": "self_link_value", - "url_map": "url_map_value", - } + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2235,10 +3495,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_url_map(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2263,8 +3523,8 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchTargetHttpProxyRequest, +def test_set_url_map_rest_required_fields( + request_type=compute.SetUrlMapTargetHttpProxyRequest, ): transport_class = transports.TargetHttpProxiesRestTransport @@ -2282,7 +3542,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2292,7 +3552,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2321,7 +3581,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2333,33 +3593,33 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_url_map(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_url_map_rest_unset_required_fields(): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_url_map._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", "targetHttpProxy", - "targetHttpProxyResource", + "urlMapReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_url_map_rest_interceptors(null_interceptor): transport = transports.TargetHttpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2372,9 +3632,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "post_patch" + transports.TargetHttpProxiesRestInterceptor, "post_set_url_map" ) as post, mock.patch.object( - transports.TargetHttpProxiesRestInterceptor, "pre_patch" + transports.TargetHttpProxiesRestInterceptor, "pre_set_url_map" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2391,7 +3651,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchTargetHttpProxyRequest() + request = compute.SetUrlMapTargetHttpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2399,7 +3659,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.set_url_map( request, metadata=[ ("key", "val"), @@ -2411,8 +3671,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchTargetHttpProxyRequest +def test_set_url_map_rest_bad_request( + transport: str = "rest", request_type=compute.SetUrlMapTargetHttpProxyRequest ): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2421,18 +3681,7 @@ def test_patch_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_http_proxy": "sample2"} - request_init["target_http_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "region": "region_value", - "self_link": "self_link_value", - "url_map": "url_map_value", - } + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2444,10 +3693,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_url_map(request) -def test_patch_unary_rest_flattened(): +def test_set_url_map_rest_flattened(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2465,9 +3714,7 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", target_http_proxy="target_http_proxy_value", - target_http_proxy_resource=compute.TargetHttpProxy( - creation_timestamp="creation_timestamp_value" - ), + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) mock_args.update(sample_request) @@ -2479,20 +3726,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_url_map(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpProxies/{target_http_proxy}" + "%s/compute/v1/projects/{project}/targetHttpProxies/{target_http_proxy}/setUrlMap" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_url_map_rest_flattened_error(transport: str = "rest"): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2501,17 +3748,15 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchTargetHttpProxyRequest(), + client.set_url_map( + compute.SetUrlMapTargetHttpProxyRequest(), project="project_value", target_http_proxy="target_http_proxy_value", - target_http_proxy_resource=compute.TargetHttpProxy( - creation_timestamp="creation_timestamp_value" - ), + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) -def test_patch_unary_rest_error(): +def test_set_url_map_rest_error(): client = TargetHttpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2573,28 +3818,6 @@ def test_set_url_map_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_url_map_unary_rest_required_fields( @@ -2911,6 +4134,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetHttpProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_http_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2948,6 +4184,14 @@ def test_target_http_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_http_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_https_proxies.py b/tests/unit/gapic/compute_v1/test_target_https_proxies.py index afc55bf2d..51a150805 100644 --- a/tests/unit/gapic/compute_v1/test_target_https_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_https_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -907,7 +909,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -951,10 +953,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -979,7 +981,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( +def test_delete_rest_required_fields( request_type=compute.DeleteTargetHttpsProxyRequest, ): transport_class = transports.TargetHttpsProxiesRestTransport @@ -1048,14 +1050,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1073,7 +1075,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1113,7 +1115,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1125,7 +1127,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteTargetHttpsProxyRequest ): client = TargetHttpsProxiesClient( @@ -1146,10 +1148,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1178,7 +1180,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1191,7 +1193,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1200,14 +1202,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteTargetHttpsProxyRequest(), project="project_value", target_https_proxy="target_https_proxy_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1216,11 +1218,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetHttpsProxyRequest, + compute.DeleteTargetHttpsProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1233,52 +1235,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - proxy_bind=True, - quic_override="quic_override_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - server_tls_policy="server_tls_policy_value", - ssl_certificates=["ssl_certificates_value"], - ssl_policy="ssl_policy_value", - url_map="url_map_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetHttpsProxy) - assert response.authorization_policy == "authorization_policy_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.proxy_bind is True - assert response.quic_override == "quic_override_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.server_tls_policy == "server_tls_policy_value" - assert response.ssl_certificates == ["ssl_certificates_value"] - assert response.ssl_policy == "ssl_policy_value" - assert response.url_map == "url_map_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetTargetHttpsProxyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetHttpsProxyRequest, +): transport_class = transports.TargetHttpsProxiesRestTransport request_init = {} @@ -1295,7 +1291,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpsProxyReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1305,7 +1301,9 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpsProxyReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1321,7 +1319,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpsProxyReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1332,32 +1330,32 @@ def test_get_rest_required_fields(request_type=compute.GetTargetHttpsProxyReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1368,7 +1366,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1381,9 +1379,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_get" + transports.TargetHttpsProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_get" + transports.TargetHttpsProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1398,19 +1396,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpsProxy.to_json( - compute.TargetHttpsProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetHttpsProxyRequest() + request = compute.DeleteTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1422,8 +1418,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetHttpsProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetHttpsProxyRequest ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1443,10 +1439,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1455,7 +1451,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "target_https_proxy": "sample2"} @@ -1470,12 +1466,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1488,7 +1484,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1497,14 +1493,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetHttpsProxyRequest(), + client.delete_unary( + compute.DeleteTargetHttpsProxyRequest(), project="project_value", target_https_proxy="target_https_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1513,106 +1509,74 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertTargetHttpsProxyRequest, + compute.GetTargetHttpsProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", - } + request_init = {"project": "sample1", "target_https_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value", creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, + proxy_bind=True, + quic_override="quic_override_value", region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + server_tls_policy="server_tls_policy_value", + ssl_certificates=["ssl_certificates_value"], + ssl_policy="ssl_policy_value", + url_map="url_map_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpsProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetHttpsProxy) + assert response.authorization_policy == "authorization_policy_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 + assert response.proxy_bind is True + assert response.quic_override == "quic_override_value" assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.server_tls_policy == "server_tls_policy_value" + assert response.ssl_certificates == ["ssl_certificates_value"] + assert response.ssl_policy == "ssl_policy_value" + assert response.url_map == "url_map_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertTargetHttpsProxyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetTargetHttpsProxyRequest): transport_class = transports.TargetHttpsProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_https_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1624,23 +1588,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1649,7 +1614,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetHttpsProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1660,44 +1625,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetHttpsProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "targetHttpsProxyResource", + "targetHttpsProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1710,9 +1674,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_insert" + transports.TargetHttpsProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_insert" + transports.TargetHttpsProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1727,17 +1691,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetHttpsProxy.to_json( + compute.TargetHttpsProxy() + ) - request = compute.InsertTargetHttpsProxyRequest() + request = compute.GetTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetHttpsProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1749,8 +1715,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertTargetHttpsProxyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetHttpsProxyRequest ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1758,7 +1724,100 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxy() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_https_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_https_proxy="target_https_proxy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetTargetHttpsProxyRequest(), + project="project_value", + target_https_proxy="target_https_proxy_value", + ) + + +def test_get_rest_error(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetHttpsProxyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} request_init["target_https_proxy_resource"] = { "authorization_policy": "authorization_policy_value", "creation_timestamp": "creation_timestamp_value", @@ -1778,6 +1837,2219 @@ def test_insert_unary_rest_bad_request( } request = request_type(request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields( + request_type=compute.InsertTargetHttpsProxyRequest, +): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetHttpsProxyRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertTargetHttpsProxyRequest(), + project="project_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + + +def test_insert_rest_error(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetHttpsProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertTargetHttpsProxyRequest, +): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetHttpsProxyRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertTargetHttpsProxyRequest(), + project="project_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListTargetHttpsProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListTargetHttpsProxiesRequest): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetHttpsProxyList.to_json( + compute.TargetHttpsProxyList() + ) + + request = compute.ListTargetHttpsProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetHttpsProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListTargetHttpsProxiesRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetHttpsProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListTargetHttpsProxiesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetHttpsProxyList( + items=[ + compute.TargetHttpsProxy(), + compute.TargetHttpsProxy(), + compute.TargetHttpsProxy(), + ], + next_page_token="abc", + ), + compute.TargetHttpsProxyList( + items=[], + next_page_token="def", + ), + compute.TargetHttpsProxyList( + items=[ + compute.TargetHttpsProxy(), + ], + next_page_token="ghi", + ), + compute.TargetHttpsProxyList( + items=[ + compute.TargetHttpsProxy(), + compute.TargetHttpsProxy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetHttpsProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetHttpsProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchTargetHttpsProxyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchTargetHttpsProxyRequest): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpsProxy", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchTargetHttpsProxyRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_https_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchTargetHttpsProxyRequest(), + project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + + +def test_patch_rest_error(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchTargetHttpsProxyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields( + request_type=compute.PatchTargetHttpsProxyRequest, +): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpsProxy", + "targetHttpsProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchTargetHttpsProxyRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxy_resource"] = { + "authorization_policy": "authorization_policy_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "quic_override": "quic_override_value", + "region": "region_value", + "self_link": "self_link_value", + "server_tls_policy": "server_tls_policy_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + "url_map": "url_map_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_https_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch_unary( + compute.PatchTargetHttpsProxyRequest(), + project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxy_resource=compute.TargetHttpsProxy( + authorization_policy="authorization_policy_value" + ), + ) + + +def test_patch_unary_rest_error(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetQuicOverrideTargetHttpsProxyRequest, + dict, + ], +) +def test_set_quic_override_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxies_set_quic_override_request_resource"] = { + "quic_override": "quic_override_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_quic_override(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_quic_override_rest_required_fields( + request_type=compute.SetQuicOverrideTargetHttpsProxyRequest, +): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_quic_override._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_quic_override._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_quic_override(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_quic_override_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_quic_override._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpsProxiesSetQuicOverrideRequestResource", + "targetHttpsProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_quic_override_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_set_quic_override" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_set_quic_override" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetQuicOverrideTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_quic_override( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_quic_override_rest_bad_request( + transport: str = "rest", request_type=compute.SetQuicOverrideTargetHttpsProxyRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxies_set_quic_override_request_resource"] = { + "quic_override": "quic_override_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_quic_override(request) + + +def test_set_quic_override_rest_flattened(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_https_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxies_set_quic_override_request_resource=compute.TargetHttpsProxiesSetQuicOverrideRequest( + quic_override="quic_override_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_quic_override(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}/setQuicOverride" + % client.transport._host, + args[1], + ) + + +def test_set_quic_override_rest_flattened_error(transport: str = "rest"): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_quic_override( + compute.SetQuicOverrideTargetHttpsProxyRequest(), + project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxies_set_quic_override_request_resource=compute.TargetHttpsProxiesSetQuicOverrideRequest( + quic_override="quic_override_value" + ), + ) + + +def test_set_quic_override_rest_error(): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetQuicOverrideTargetHttpsProxyRequest, + dict, + ], +) +def test_set_quic_override_unary_rest(request_type): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxies_set_quic_override_request_resource"] = { + "quic_override": "quic_override_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_quic_override_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_quic_override_unary_rest_required_fields( + request_type=compute.SetQuicOverrideTargetHttpsProxyRequest, +): + transport_class = transports.TargetHttpsProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_https_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_quic_override._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_quic_override._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" + + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_quic_override_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_quic_override_unary_rest_unset_required_fields(): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_quic_override._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetHttpsProxiesSetQuicOverrideRequestResource", + "targetHttpsProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_quic_override_unary_rest_interceptors(null_interceptor): + transport = transports.TargetHttpsProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetHttpsProxiesRestInterceptor(), + ) + client = TargetHttpsProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "post_set_quic_override" + ) as post, mock.patch.object( + transports.TargetHttpsProxiesRestInterceptor, "pre_set_quic_override" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetQuicOverrideTargetHttpsProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_quic_override_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_quic_override_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetQuicOverrideTargetHttpsProxyRequest +): + client = TargetHttpsProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxies_set_quic_override_request_resource"] = { + "quic_override": "quic_override_value" + } + request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. with mock.patch.object(Session, "request") as req, pytest.raises( core_exceptions.BadRequest @@ -1787,10 +4059,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.set_quic_override_unary(request) -def test_insert_unary_rest_flattened(): +def test_set_quic_override_unary_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1802,13 +4074,14 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_https_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" + target_https_proxy="target_https_proxy_value", + target_https_proxies_set_quic_override_request_resource=compute.TargetHttpsProxiesSetQuicOverrideRequest( + quic_override="quic_override_value" ), ) mock_args.update(sample_request) @@ -1821,20 +4094,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.set_quic_override_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpsProxies" + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}/setQuicOverride" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_set_quic_override_unary_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1843,16 +4116,17 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertTargetHttpsProxyRequest(), + client.set_quic_override_unary( + compute.SetQuicOverrideTargetHttpsProxyRequest(), project="project_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" + target_https_proxy="target_https_proxy_value", + target_https_proxies_set_quic_override_request_resource=compute.TargetHttpsProxiesSetQuicOverrideRequest( + quic_override="quic_override_value" ), ) -def test_insert_unary_rest_error(): +def test_set_quic_override_unary_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1861,51 +4135,93 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListTargetHttpsProxiesRequest, + compute.SetSslCertificatesTargetHttpsProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_set_ssl_certificates_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_ssl_certificates(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListTargetHttpsProxiesRequest): +def test_set_ssl_certificates_rest_required_fields( + request_type=compute.SetSslCertificatesTargetHttpsProxyRequest, +): transport_class = transports.TargetHttpsProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_https_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1917,31 +4233,26 @@ def test_list_rest_required_fields(request_type=compute.ListTargetHttpsProxiesRe unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetHttpsProxy"] = "target_https_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetHttpsProxy" in jsonified_request + assert jsonified_request["targetHttpsProxy"] == "target_https_proxy_value" client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1950,7 +4261,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetHttpsProxiesRe request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1961,46 +4272,45 @@ def test_list_rest_required_fields(request_type=compute.ListTargetHttpsProxiesRe # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_ssl_certificates(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_ssl_certificates_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "targetHttpsProxiesSetSslCertificatesRequestResource", + "targetHttpsProxy", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_ssl_certificates_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2013,9 +4323,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_list" + transports.TargetHttpsProxiesRestInterceptor, "post_set_ssl_certificates" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_list" + transports.TargetHttpsProxiesRestInterceptor, "pre_set_ssl_certificates" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2030,19 +4340,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetHttpsProxyList.to_json( - compute.TargetHttpsProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListTargetHttpsProxiesRequest() + request = compute.SetSslCertificatesTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxyList + post.return_value = compute.Operation - client.list( + client.set_ssl_certificates( request, metadata=[ ("key", "val"), @@ -2054,8 +4362,9 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListTargetHttpsProxiesRequest +def test_set_ssl_certificates_rest_bad_request( + transport: str = "rest", + request_type=compute.SetSslCertificatesTargetHttpsProxyRequest, ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2063,7 +4372,10 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_https_proxy": "sample2"} + request_init["target_https_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2075,10 +4387,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_ssl_certificates(request) -def test_list_rest_flattened(): +def test_set_ssl_certificates_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2087,39 +4399,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetHttpsProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_https_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxies_set_ssl_certificates_request_resource=compute.TargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetHttpsProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_ssl_certificates(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpsProxies" + "%s/compute/v1/projects/{project}/targetHttpsProxies/{target_https_proxy}/setSslCertificates" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_certificates_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2128,81 +4444,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListTargetHttpsProxiesRequest(), + client.set_ssl_certificates( + compute.SetSslCertificatesTargetHttpsProxyRequest(), project="project_value", + target_https_proxy="target_https_proxy_value", + target_https_proxies_set_ssl_certificates_request_resource=compute.TargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_ssl_certificates_rest_error(): client = TargetHttpsProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetHttpsProxyList( - items=[ - compute.TargetHttpsProxy(), - compute.TargetHttpsProxy(), - compute.TargetHttpsProxy(), - ], - next_page_token="abc", - ), - compute.TargetHttpsProxyList( - items=[], - next_page_token="def", - ), - compute.TargetHttpsProxyList( - items=[ - compute.TargetHttpsProxy(), - ], - next_page_token="ghi", - ), - compute.TargetHttpsProxyList( - items=[ - compute.TargetHttpsProxy(), - compute.TargetHttpsProxy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.TargetHttpsProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetHttpsProxy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchTargetHttpsProxyRequest, + compute.SetSslCertificatesTargetHttpsProxyRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_set_ssl_certificates_unary_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2210,22 +4475,8 @@ def test_patch_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", + request_init["target_https_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] } request = request_type(request_init) @@ -2263,36 +4514,14 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_ssl_certificates_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields( - request_type=compute.PatchTargetHttpsProxyRequest, +def test_set_ssl_certificates_unary_rest_required_fields( + request_type=compute.SetSslCertificatesTargetHttpsProxyRequest, ): transport_class = transports.TargetHttpsProxiesRestTransport @@ -2310,7 +4539,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2320,7 +4549,7 @@ def test_patch_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2349,7 +4578,7 @@ def test_patch_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "post", "query_params": request_init, } transcode_result["body"] = {} @@ -2361,33 +4590,33 @@ def test_patch_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.set_ssl_certificates_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_set_ssl_certificates_unary_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", + "targetHttpsProxiesSetSslCertificatesRequestResource", "targetHttpsProxy", - "targetHttpsProxyResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2400,9 +4629,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_patch" + transports.TargetHttpsProxiesRestInterceptor, "post_set_ssl_certificates" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_patch" + transports.TargetHttpsProxiesRestInterceptor, "pre_set_ssl_certificates" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2419,7 +4648,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchTargetHttpsProxyRequest() + request = compute.SetSslCertificatesTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2427,7 +4656,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.set_ssl_certificates_unary( request, metadata=[ ("key", "val"), @@ -2439,8 +4668,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchTargetHttpsProxyRequest +def test_set_ssl_certificates_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetSslCertificatesTargetHttpsProxyRequest, ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2449,22 +4679,8 @@ def test_patch_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["target_https_proxy_resource"] = { - "authorization_policy": "authorization_policy_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "fingerprint": "fingerprint_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "quic_override": "quic_override_value", - "region": "region_value", - "self_link": "self_link_value", - "server_tls_policy": "server_tls_policy_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - "url_map": "url_map_value", + request_init["target_https_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] } request = request_type(request_init) @@ -2477,10 +4693,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.set_ssl_certificates_unary(request) -def test_patch_unary_rest_flattened(): +def test_set_ssl_certificates_unary_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2498,8 +4714,8 @@ def test_patch_unary_rest_flattened(): mock_args = dict( project="project_value", target_https_proxy="target_https_proxy_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" + target_https_proxies_set_ssl_certificates_request_resource=compute.TargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) mock_args.update(sample_request) @@ -2512,20 +4728,20 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.set_ssl_certificates_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}" + "%s/compute/v1/projects/{project}/targetHttpsProxies/{target_https_proxy}/setSslCertificates" % client.transport._host, args[1], ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2534,17 +4750,17 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchTargetHttpsProxyRequest(), + client.set_ssl_certificates_unary( + compute.SetSslCertificatesTargetHttpsProxyRequest(), project="project_value", target_https_proxy="target_https_proxy_value", - target_https_proxy_resource=compute.TargetHttpsProxy( - authorization_policy="authorization_policy_value" + target_https_proxies_set_ssl_certificates_request_resource=compute.TargetHttpsProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) -def test_patch_unary_rest_error(): +def test_set_ssl_certificates_unary_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2553,11 +4769,11 @@ def test_patch_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetQuicOverrideTargetHttpsProxyRequest, + compute.SetSslPolicyTargetHttpsProxyRequest, dict, ], ) -def test_set_quic_override_unary_rest(request_type): +def test_set_ssl_policy_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2565,9 +4781,7 @@ def test_set_quic_override_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["target_https_proxies_set_quic_override_request_resource"] = { - "quic_override": "quic_override_value" - } + request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2604,10 +4818,10 @@ def test_set_quic_override_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_quic_override_unary(request) + response = client.set_ssl_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2632,8 +4846,8 @@ def test_set_quic_override_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_quic_override_unary_rest_required_fields( - request_type=compute.SetQuicOverrideTargetHttpsProxyRequest, +def test_set_ssl_policy_rest_required_fields( + request_type=compute.SetSslPolicyTargetHttpsProxyRequest, ): transport_class = transports.TargetHttpsProxiesRestTransport @@ -2651,7 +4865,7 @@ def test_set_quic_override_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_quic_override._get_unset_required_fields(jsonified_request) + ).set_ssl_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2661,7 +4875,7 @@ def test_set_quic_override_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_quic_override._get_unset_required_fields(jsonified_request) + ).set_ssl_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2702,25 +4916,25 @@ def test_set_quic_override_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_quic_override_unary(request) + response = client.set_ssl_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_quic_override_unary_rest_unset_required_fields(): +def test_set_ssl_policy_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_quic_override._get_unset_required_fields({}) + unset_fields = transport.set_ssl_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "targetHttpsProxiesSetQuicOverrideRequestResource", + "sslPolicyReferenceResource", "targetHttpsProxy", ) ) @@ -2728,7 +4942,7 @@ def test_set_quic_override_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_quic_override_unary_rest_interceptors(null_interceptor): +def test_set_ssl_policy_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2741,9 +4955,9 @@ def test_set_quic_override_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_set_quic_override" + transports.TargetHttpsProxiesRestInterceptor, "post_set_ssl_policy" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_set_quic_override" + transports.TargetHttpsProxiesRestInterceptor, "pre_set_ssl_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2760,7 +4974,7 @@ def test_set_quic_override_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetQuicOverrideTargetHttpsProxyRequest() + request = compute.SetSslPolicyTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2768,7 +4982,7 @@ def test_set_quic_override_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_quic_override_unary( + client.set_ssl_policy( request, metadata=[ ("key", "val"), @@ -2780,8 +4994,8 @@ def test_set_quic_override_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_quic_override_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetQuicOverrideTargetHttpsProxyRequest +def test_set_ssl_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetSslPolicyTargetHttpsProxyRequest ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2790,9 +5004,7 @@ def test_set_quic_override_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["target_https_proxies_set_quic_override_request_resource"] = { - "quic_override": "quic_override_value" - } + request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2804,10 +5016,10 @@ def test_set_quic_override_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_quic_override_unary(request) + client.set_ssl_policy(request) -def test_set_quic_override_unary_rest_flattened(): +def test_set_ssl_policy_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2825,8 +5037,8 @@ def test_set_quic_override_unary_rest_flattened(): mock_args = dict( project="project_value", target_https_proxy="target_https_proxy_value", - target_https_proxies_set_quic_override_request_resource=compute.TargetHttpsProxiesSetQuicOverrideRequest( - quic_override="quic_override_value" + ssl_policy_reference_resource=compute.SslPolicyReference( + ssl_policy="ssl_policy_value" ), ) mock_args.update(sample_request) @@ -2839,20 +5051,20 @@ def test_set_quic_override_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_quic_override_unary(**mock_args) + client.set_ssl_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}/setQuicOverride" + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}/setSslPolicy" % client.transport._host, args[1], ) -def test_set_quic_override_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_policy_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2861,17 +5073,17 @@ def test_set_quic_override_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_quic_override_unary( - compute.SetQuicOverrideTargetHttpsProxyRequest(), + client.set_ssl_policy( + compute.SetSslPolicyTargetHttpsProxyRequest(), project="project_value", target_https_proxy="target_https_proxy_value", - target_https_proxies_set_quic_override_request_resource=compute.TargetHttpsProxiesSetQuicOverrideRequest( - quic_override="quic_override_value" + ssl_policy_reference_resource=compute.SslPolicyReference( + ssl_policy="ssl_policy_value" ), ) -def test_set_quic_override_unary_rest_error(): +def test_set_ssl_policy_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2880,11 +5092,11 @@ def test_set_quic_override_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetSslCertificatesTargetHttpsProxyRequest, + compute.SetSslPolicyTargetHttpsProxyRequest, dict, ], ) -def test_set_ssl_certificates_unary_rest(request_type): +def test_set_ssl_policy_unary_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2892,9 +5104,7 @@ def test_set_ssl_certificates_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["target_https_proxies_set_ssl_certificates_request_resource"] = { - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] - } + request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2931,36 +5141,14 @@ def test_set_ssl_certificates_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_certificates_unary(request) + response = client.set_ssl_policy_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_ssl_certificates_unary_rest_required_fields( - request_type=compute.SetSslCertificatesTargetHttpsProxyRequest, +def test_set_ssl_policy_unary_rest_required_fields( + request_type=compute.SetSslPolicyTargetHttpsProxyRequest, ): transport_class = transports.TargetHttpsProxiesRestTransport @@ -2978,7 +5166,7 @@ def test_set_ssl_certificates_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + ).set_ssl_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2988,7 +5176,7 @@ def test_set_ssl_certificates_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + ).set_ssl_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3029,25 +5217,25 @@ def test_set_ssl_certificates_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_certificates_unary(request) + response = client.set_ssl_policy_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_ssl_certificates_unary_rest_unset_required_fields(): +def test_set_ssl_policy_unary_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) + unset_fields = transport.set_ssl_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "targetHttpsProxiesSetSslCertificatesRequestResource", + "sslPolicyReferenceResource", "targetHttpsProxy", ) ) @@ -3055,7 +5243,7 @@ def test_set_ssl_certificates_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): +def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3068,9 +5256,9 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_set_ssl_certificates" + transports.TargetHttpsProxiesRestInterceptor, "post_set_ssl_policy" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_set_ssl_certificates" + transports.TargetHttpsProxiesRestInterceptor, "pre_set_ssl_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3087,7 +5275,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetSslCertificatesTargetHttpsProxyRequest() + request = compute.SetSslPolicyTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3095,7 +5283,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_ssl_certificates_unary( + client.set_ssl_policy_unary( request, metadata=[ ("key", "val"), @@ -3107,9 +5295,8 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_ssl_certificates_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetSslCertificatesTargetHttpsProxyRequest, +def test_set_ssl_policy_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetSslPolicyTargetHttpsProxyRequest ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3118,9 +5305,7 @@ def test_set_ssl_certificates_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["target_https_proxies_set_ssl_certificates_request_resource"] = { - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] - } + request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3132,10 +5317,10 @@ def test_set_ssl_certificates_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_ssl_certificates_unary(request) + client.set_ssl_policy_unary(request) -def test_set_ssl_certificates_unary_rest_flattened(): +def test_set_ssl_policy_unary_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3153,8 +5338,8 @@ def test_set_ssl_certificates_unary_rest_flattened(): mock_args = dict( project="project_value", target_https_proxy="target_https_proxy_value", - target_https_proxies_set_ssl_certificates_request_resource=compute.TargetHttpsProxiesSetSslCertificatesRequest( - ssl_certificates=["ssl_certificates_value"] + ssl_policy_reference_resource=compute.SslPolicyReference( + ssl_policy="ssl_policy_value" ), ) mock_args.update(sample_request) @@ -3167,20 +5352,20 @@ def test_set_ssl_certificates_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_ssl_certificates_unary(**mock_args) + client.set_ssl_policy_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/targetHttpsProxies/{target_https_proxy}/setSslCertificates" + "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}/setSslPolicy" % client.transport._host, args[1], ) -def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_policy_unary_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3189,17 +5374,17 @@ def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_ssl_certificates_unary( - compute.SetSslCertificatesTargetHttpsProxyRequest(), + client.set_ssl_policy_unary( + compute.SetSslPolicyTargetHttpsProxyRequest(), project="project_value", target_https_proxy="target_https_proxy_value", - target_https_proxies_set_ssl_certificates_request_resource=compute.TargetHttpsProxiesSetSslCertificatesRequest( - ssl_certificates=["ssl_certificates_value"] + ssl_policy_reference_resource=compute.SslPolicyReference( + ssl_policy="ssl_policy_value" ), ) -def test_set_ssl_certificates_unary_rest_error(): +def test_set_ssl_policy_unary_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3208,11 +5393,11 @@ def test_set_ssl_certificates_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetSslPolicyTargetHttpsProxyRequest, + compute.SetUrlMapTargetHttpsProxyRequest, dict, ], ) -def test_set_ssl_policy_unary_rest(request_type): +def test_set_url_map_rest(request_type): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3220,7 +5405,7 @@ def test_set_ssl_policy_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3257,10 +5442,10 @@ def test_set_ssl_policy_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_policy_unary(request) + response = client.set_url_map(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3285,8 +5470,8 @@ def test_set_ssl_policy_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_ssl_policy_unary_rest_required_fields( - request_type=compute.SetSslPolicyTargetHttpsProxyRequest, +def test_set_url_map_rest_required_fields( + request_type=compute.SetUrlMapTargetHttpsProxyRequest, ): transport_class = transports.TargetHttpsProxiesRestTransport @@ -3304,7 +5489,7 @@ def test_set_ssl_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_policy._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3314,7 +5499,7 @@ def test_set_ssl_policy_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_policy._get_unset_required_fields(jsonified_request) + ).set_url_map._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3355,33 +5540,33 @@ def test_set_ssl_policy_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_policy_unary(request) + response = client.set_url_map(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_ssl_policy_unary_rest_unset_required_fields(): +def test_set_url_map_rest_unset_required_fields(): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_ssl_policy._get_unset_required_fields({}) + unset_fields = transport.set_url_map._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "sslPolicyReferenceResource", "targetHttpsProxy", + "urlMapReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): +def test_set_url_map_rest_interceptors(null_interceptor): transport = transports.TargetHttpsProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3394,9 +5579,9 @@ def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "post_set_ssl_policy" + transports.TargetHttpsProxiesRestInterceptor, "post_set_url_map" ) as post, mock.patch.object( - transports.TargetHttpsProxiesRestInterceptor, "pre_set_ssl_policy" + transports.TargetHttpsProxiesRestInterceptor, "pre_set_url_map" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3413,7 +5598,7 @@ def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetSslPolicyTargetHttpsProxyRequest() + request = compute.SetUrlMapTargetHttpsProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3421,7 +5606,7 @@ def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_ssl_policy_unary( + client.set_url_map( request, metadata=[ ("key", "val"), @@ -3433,8 +5618,8 @@ def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_ssl_policy_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetSslPolicyTargetHttpsProxyRequest +def test_set_url_map_rest_bad_request( + transport: str = "rest", request_type=compute.SetUrlMapTargetHttpsProxyRequest ): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3443,7 +5628,7 @@ def test_set_ssl_policy_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_https_proxy": "sample2"} - request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} + request_init["url_map_reference_resource"] = {"url_map": "url_map_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3455,10 +5640,10 @@ def test_set_ssl_policy_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_ssl_policy_unary(request) + client.set_url_map(request) -def test_set_ssl_policy_unary_rest_flattened(): +def test_set_url_map_rest_flattened(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3476,9 +5661,7 @@ def test_set_ssl_policy_unary_rest_flattened(): mock_args = dict( project="project_value", target_https_proxy="target_https_proxy_value", - ssl_policy_reference_resource=compute.SslPolicyReference( - ssl_policy="ssl_policy_value" - ), + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) mock_args.update(sample_request) @@ -3490,20 +5673,20 @@ def test_set_ssl_policy_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_ssl_policy_unary(**mock_args) + client.set_url_map(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetHttpsProxies/{target_https_proxy}/setSslPolicy" + "%s/compute/v1/projects/{project}/targetHttpsProxies/{target_https_proxy}/setUrlMap" % client.transport._host, args[1], ) -def test_set_ssl_policy_unary_rest_flattened_error(transport: str = "rest"): +def test_set_url_map_rest_flattened_error(transport: str = "rest"): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3512,17 +5695,15 @@ def test_set_ssl_policy_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_ssl_policy_unary( - compute.SetSslPolicyTargetHttpsProxyRequest(), + client.set_url_map( + compute.SetUrlMapTargetHttpsProxyRequest(), project="project_value", target_https_proxy="target_https_proxy_value", - ssl_policy_reference_resource=compute.SslPolicyReference( - ssl_policy="ssl_policy_value" - ), + url_map_reference_resource=compute.UrlMapReference(url_map="url_map_value"), ) -def test_set_ssl_policy_unary_rest_error(): +def test_set_url_map_rest_error(): client = TargetHttpsProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3584,28 +5765,6 @@ def test_set_url_map_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_url_map_unary_rest_required_fields( @@ -3922,6 +6081,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetHttpsProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_https_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3962,6 +6134,14 @@ def test_target_https_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_https_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_instances.py b/tests/unit/gapic/compute_v1/test_target_instances.py index e56265b7b..f9579fb89 100644 --- a/tests/unit/gapic/compute_v1/test_target_instances.py +++ b/tests/unit/gapic/compute_v1/test_target_instances.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -898,7 +900,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -946,10 +948,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -965,18 +967,632 @@ def test_delete_unary_rest(request_type): assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_delete_rest_required_fields(request_type=compute.DeleteTargetInstanceRequest): + transport_class = transports.TargetInstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_instance"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetInstance"] = "target_instance_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetInstance" in jsonified_request + assert jsonified_request["targetInstance"] == "target_instance_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_rest_unset_required_fields(): + transport = transports.TargetInstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetInstance", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.TargetInstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetInstancesRestInterceptor(), + ) + client = TargetInstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetInstancesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.TargetInstancesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteTargetInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetInstanceRequest +): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "target_instance": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "target_instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + target_instance="target_instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/targetInstances/{target_instance}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteTargetInstanceRequest(), + project="project_value", + zone="zone_value", + target_instance="target_instance_value", + ) + + +def test_delete_rest_error(): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteTargetInstanceRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "target_instance": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetInstanceRequest, +): + transport_class = transports.TargetInstancesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_instance"] = "" + request_init["zone"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetInstance"] = "target_instance_value" + jsonified_request["zone"] = "zone_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetInstance" in jsonified_request + assert jsonified_request["targetInstance"] == "target_instance_value" + assert "zone" in jsonified_request + assert jsonified_request["zone"] == "zone_value" + + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.TargetInstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetInstance", + "zone", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.TargetInstancesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetInstancesRestInterceptor(), + ) + client = TargetInstancesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetInstancesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.TargetInstancesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteTargetInstanceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetInstanceRequest +): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "target_instance": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "zone": "sample2", + "target_instance": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + zone="zone_value", + target_instance="target_instance_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/zones/{zone}/targetInstances/{target_instance}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteTargetInstanceRequest(), + project="project_value", + zone="zone_value", + target_instance="target_instance_value", + ) + + +def test_delete_unary_rest_error(): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetTargetInstanceRequest, + dict, + ], +) +def test_get_rest(request_type): + client = TargetInstancesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "zone": "sample2", + "target_instance": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetInstance( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + instance="instance_value", + kind="kind_value", + name="name_value", + nat_policy="nat_policy_value", + network="network_value", + self_link="self_link_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetInstance.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.TargetInstance) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.instance == "instance_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.nat_policy == "nat_policy_value" + assert response.network == "network_value" + assert response.self_link == "self_link_value" assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetInstanceRequest, -): +def test_get_rest_required_fields(request_type=compute.GetTargetInstanceRequest): transport_class = transports.TargetInstancesRestTransport request_init = {} @@ -994,7 +1610,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1005,9 +1621,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1025,7 +1639,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetInstance() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1036,32 +1650,32 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetInstance.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetInstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", @@ -1073,7 +1687,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetInstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1086,9 +1700,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetInstancesRestInterceptor, "post_delete" + transports.TargetInstancesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetInstancesRestInterceptor, "pre_delete" + transports.TargetInstancesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1103,17 +1717,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetInstance.to_json( + compute.TargetInstance() + ) - request = compute.DeleteTargetInstanceRequest() + request = compute.GetTargetInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetInstance - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1125,8 +1741,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteTargetInstanceRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetInstanceRequest ): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1150,10 +1766,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1162,7 +1778,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetInstance() # get arguments that satisfy an http rule for this method sample_request = { @@ -1182,12 +1798,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetInstance.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1200,7 +1816,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1209,15 +1825,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteTargetInstanceRequest(), + client.get( + compute.GetTargetInstanceRequest(), project="project_value", zone="zone_value", target_instance="target_instance_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1226,68 +1842,99 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetInstanceRequest, + compute.InsertTargetInstanceRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "target_instance": "sample3", + request_init = {"project": "sample1", "zone": "sample2"} + request_init["target_instance_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "instance": "instance_value", + "kind": "kind_value", + "name": "name_value", + "nat_policy": "nat_policy_value", + "network": "network_value", + "self_link": "self_link_value", + "zone": "zone_value", } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetInstance( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - instance="instance_value", + insert_time="insert_time_value", kind="kind_value", name="name_value", - nat_policy="nat_policy_value", - network="network_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetInstance.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetInstance) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.instance == "instance_value" + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.nat_policy == "nat_policy_value" - assert response.network == "network_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetTargetInstanceRequest): +def test_insert_rest_required_fields(request_type=compute.InsertTargetInstanceRequest): transport_class = transports.TargetInstancesRestTransport request_init = {} request_init["project"] = "" - request_init["target_instance"] = "" request_init["zone"] = "" request = request_type(request_init) jsonified_request = json.loads( @@ -1300,25 +1947,24 @@ def test_get_rest_required_fields(request_type=compute.GetTargetInstanceRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["targetInstance"] = "target_instance_value" jsonified_request["zone"] = "zone_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "targetInstance" in jsonified_request - assert jsonified_request["targetInstance"] == "target_instance_value" assert "zone" in jsonified_request assert jsonified_request["zone"] == "zone_value" @@ -1329,7 +1975,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetInstanceRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetInstance() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1340,36 +1986,37 @@ def test_get_rest_required_fields(request_type=compute.GetTargetInstanceRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetInstance.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.TargetInstancesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", - "targetInstance", + "targetInstanceResource", "zone", ) ) @@ -1377,7 +2024,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.TargetInstancesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1390,9 +2037,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetInstancesRestInterceptor, "post_get" + transports.TargetInstancesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.TargetInstancesRestInterceptor, "pre_get" + transports.TargetInstancesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1407,19 +2054,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetInstance.to_json( - compute.TargetInstance() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetInstanceRequest() + request = compute.InsertTargetInstanceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetInstance + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1431,8 +2076,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetInstanceRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetInstanceRequest ): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1440,10 +2085,18 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "zone": "sample2", - "target_instance": "sample3", + request_init = {"project": "sample1", "zone": "sample2"} + request_init["target_instance_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "instance": "instance_value", + "kind": "kind_value", + "name": "name_value", + "nat_policy": "nat_policy_value", + "network": "network_value", + "self_link": "self_link_value", + "zone": "zone_value", } request = request_type(request_init) @@ -1456,10 +2109,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1468,45 +2121,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetInstance() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "zone": "sample2", - "target_instance": "sample3", - } + sample_request = {"project": "sample1", "zone": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", zone="zone_value", - target_instance="target_instance_value", + target_instance_resource=compute.TargetInstance( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetInstance.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/zones/{zone}/targetInstances/{target_instance}" + "%s/compute/v1/projects/{project}/zones/{zone}/targetInstances" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1515,15 +2166,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetInstanceRequest(), + client.insert( + compute.InsertTargetInstanceRequest(), project="project_value", zone="zone_value", - target_instance="target_instance_value", + target_instance_resource=compute.TargetInstance( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = TargetInstancesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1596,28 +2249,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -2297,6 +2928,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetInstancesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_instances_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2332,6 +2976,14 @@ def test_target_instances_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_instances_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_pools.py b/tests/unit/gapic/compute_v1/test_target_pools.py index 5956bff02..71b1c60ce 100644 --- a/tests/unit/gapic/compute_v1/test_target_pools.py +++ b/tests/unit/gapic/compute_v1/test_target_pools.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -516,7 +518,7 @@ def test_target_pools_client_client_options_credentials_file( dict, ], ) -def test_add_health_check_unary_rest(request_type): +def test_add_health_check_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -563,10 +565,10 @@ def test_add_health_check_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_health_check_unary(request) + response = client.add_health_check(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -591,7 +593,7 @@ def test_add_health_check_unary_rest(request_type): assert response.zone == "zone_value" -def test_add_health_check_unary_rest_required_fields( +def test_add_health_check_rest_required_fields( request_type=compute.AddHealthCheckTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport @@ -665,14 +667,14 @@ def test_add_health_check_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_health_check_unary(request) + response = client.add_health_check(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_health_check_unary_rest_unset_required_fields(): +def test_add_health_check_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -692,7 +694,7 @@ def test_add_health_check_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_health_check_unary_rest_interceptors(null_interceptor): +def test_add_health_check_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -732,7 +734,7 @@ def test_add_health_check_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_health_check_unary( + client.add_health_check( request, metadata=[ ("key", "val"), @@ -744,7 +746,7 @@ def test_add_health_check_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_health_check_unary_rest_bad_request( +def test_add_health_check_rest_bad_request( transport: str = "rest", request_type=compute.AddHealthCheckTargetPoolRequest ): client = TargetPoolsClient( @@ -768,10 +770,10 @@ def test_add_health_check_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_health_check_unary(request) + client.add_health_check(request) -def test_add_health_check_unary_rest_flattened(): +def test_add_health_check_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -810,7 +812,7 @@ def test_add_health_check_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_health_check_unary(**mock_args) + client.add_health_check(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -823,7 +825,7 @@ def test_add_health_check_unary_rest_flattened(): ) -def test_add_health_check_unary_rest_flattened_error(transport: str = "rest"): +def test_add_health_check_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -832,7 +834,7 @@ def test_add_health_check_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_health_check_unary( + client.add_health_check( compute.AddHealthCheckTargetPoolRequest(), project="project_value", region="region_value", @@ -845,7 +847,7 @@ def test_add_health_check_unary_rest_flattened_error(transport: str = "rest"): ) -def test_add_health_check_unary_rest_error(): +def test_add_health_check_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -854,11 +856,11 @@ def test_add_health_check_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AddInstanceTargetPoolRequest, + compute.AddHealthCheckTargetPoolRequest, dict, ], ) -def test_add_instance_unary_rest(request_type): +def test_add_health_check_unary_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -866,8 +868,8 @@ def test_add_instance_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["target_pools_add_instance_request_resource"] = { - "instances": [{"instance": "instance_value"}] + request_init["target_pools_add_health_check_request_resource"] = { + "health_checks": [{"health_check": "health_check_value"}] } request = request_type(request_init) @@ -905,36 +907,14 @@ def test_add_instance_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_instance_unary(request) + response = client.add_health_check_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_add_instance_unary_rest_required_fields( - request_type=compute.AddInstanceTargetPoolRequest, +def test_add_health_check_unary_rest_required_fields( + request_type=compute.AddHealthCheckTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport @@ -953,7 +933,7 @@ def test_add_instance_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_instance._get_unset_required_fields(jsonified_request) + ).add_health_check._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -964,7 +944,7 @@ def test_add_instance_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).add_instance._get_unset_required_fields(jsonified_request) + ).add_health_check._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1007,19 +987,19 @@ def test_add_instance_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.add_instance_unary(request) + response = client.add_health_check_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_add_instance_unary_rest_unset_required_fields(): +def test_add_health_check_unary_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.add_instance._get_unset_required_fields({}) + unset_fields = transport.add_health_check._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -1027,14 +1007,14 @@ def test_add_instance_unary_rest_unset_required_fields(): "project", "region", "targetPool", - "targetPoolsAddInstanceRequestResource", + "targetPoolsAddHealthCheckRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_add_instance_unary_rest_interceptors(null_interceptor): +def test_add_health_check_unary_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1047,9 +1027,9 @@ def test_add_instance_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_add_instance" + transports.TargetPoolsRestInterceptor, "post_add_health_check" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_add_instance" + transports.TargetPoolsRestInterceptor, "pre_add_health_check" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1066,7 +1046,7 @@ def test_add_instance_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AddInstanceTargetPoolRequest() + request = compute.AddHealthCheckTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1074,7 +1054,7 @@ def test_add_instance_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.add_instance_unary( + client.add_health_check_unary( request, metadata=[ ("key", "val"), @@ -1086,8 +1066,8 @@ def test_add_instance_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_add_instance_unary_rest_bad_request( - transport: str = "rest", request_type=compute.AddInstanceTargetPoolRequest +def test_add_health_check_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddHealthCheckTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1096,8 +1076,8 @@ def test_add_instance_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["target_pools_add_instance_request_resource"] = { - "instances": [{"instance": "instance_value"}] + request_init["target_pools_add_health_check_request_resource"] = { + "health_checks": [{"health_check": "health_check_value"}] } request = request_type(request_init) @@ -1110,10 +1090,10 @@ def test_add_instance_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.add_instance_unary(request) + client.add_health_check_unary(request) -def test_add_instance_unary_rest_flattened(): +def test_add_health_check_unary_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1136,8 +1116,10 @@ def test_add_instance_unary_rest_flattened(): project="project_value", region="region_value", target_pool="target_pool_value", - target_pools_add_instance_request_resource=compute.TargetPoolsAddInstanceRequest( - instances=[compute.InstanceReference(instance="instance_value")] + target_pools_add_health_check_request_resource=compute.TargetPoolsAddHealthCheckRequest( + health_checks=[ + compute.HealthCheckReference(health_check="health_check_value") + ] ), ) mock_args.update(sample_request) @@ -1150,20 +1132,20 @@ def test_add_instance_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.add_instance_unary(**mock_args) + client.add_health_check_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/addInstance" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/addHealthCheck" % client.transport._host, args[1], ) -def test_add_instance_unary_rest_flattened_error(transport: str = "rest"): +def test_add_health_check_unary_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1172,18 +1154,20 @@ def test_add_instance_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.add_instance_unary( - compute.AddInstanceTargetPoolRequest(), + client.add_health_check_unary( + compute.AddHealthCheckTargetPoolRequest(), project="project_value", region="region_value", target_pool="target_pool_value", - target_pools_add_instance_request_resource=compute.TargetPoolsAddInstanceRequest( - instances=[compute.InstanceReference(instance="instance_value")] + target_pools_add_health_check_request_resource=compute.TargetPoolsAddHealthCheckRequest( + health_checks=[ + compute.HealthCheckReference(health_check="health_check_value") + ] ), ) -def test_add_instance_unary_rest_error(): +def test_add_health_check_unary_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1192,55 +1176,94 @@ def test_add_instance_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.AggregatedListTargetPoolsRequest, + compute.AddInstanceTargetPoolRequest, dict, ], ) -def test_aggregated_list_rest(request_type): +def test_add_instance_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_add_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolAggregatedList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - unreachables=["unreachables_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_instance(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.AggregatedListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.unreachables == ["unreachables_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_aggregated_list_rest_required_fields( - request_type=compute.AggregatedListTargetPoolsRequest, +def test_add_instance_rest_required_fields( + request_type=compute.AddInstanceTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport request_init = {} request_init["project"] = "" + request_init["region"] = "" + request_init["target_pool"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1252,32 +1275,29 @@ def test_aggregated_list_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_instance._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).aggregated_list._get_unset_required_fields(jsonified_request) + ).add_instance._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "include_all_scopes", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1286,7 +1306,7 @@ def test_aggregated_list_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolAggregatedList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1297,47 +1317,46 @@ def test_aggregated_list_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.aggregated_list(request) + response = client.add_instance(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_aggregated_list_rest_unset_required_fields(): +def test_add_instance_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.aggregated_list._get_unset_required_fields({}) + unset_fields = transport.add_instance._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "includeAllScopes", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "region", + "targetPool", + "targetPoolsAddInstanceRequestResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_aggregated_list_rest_interceptors(null_interceptor): +def test_add_instance_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1350,9 +1369,9 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_aggregated_list" + transports.TargetPoolsRestInterceptor, "post_add_instance" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_aggregated_list" + transports.TargetPoolsRestInterceptor, "pre_add_instance" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1367,19 +1386,17 @@ def test_aggregated_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetPoolAggregatedList.to_json( - compute.TargetPoolAggregatedList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.AggregatedListTargetPoolsRequest() + request = compute.AddInstanceTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPoolAggregatedList + post.return_value = compute.Operation - client.aggregated_list( + client.add_instance( request, metadata=[ ("key", "val"), @@ -1391,8 +1408,8 @@ def test_aggregated_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_aggregated_list_rest_bad_request( - transport: str = "rest", request_type=compute.AggregatedListTargetPoolsRequest +def test_add_instance_rest_bad_request( + transport: str = "rest", request_type=compute.AddInstanceTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1400,7 +1417,10 @@ def test_aggregated_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_add_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1412,10 +1432,10 @@ def test_aggregated_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.aggregated_list(request) + client.add_instance(request) -def test_aggregated_list_rest_flattened(): +def test_add_instance_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1424,39 +1444,48 @@ def test_aggregated_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolAggregatedList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj + region="region_value", + target_pool="target_pool_value", + target_pools_add_instance_request_resource=compute.TargetPoolsAddInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolAggregatedList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.aggregated_list(**mock_args) + client.add_instance(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/aggregated/targetPools" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/addInstance" % client.transport._host, args[1], ) -def test_aggregated_list_rest_flattened_error(transport: str = "rest"): +def test_add_instance_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1465,93 +1494,31 @@ def test_aggregated_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.aggregated_list( - compute.AggregatedListTargetPoolsRequest(), + client.add_instance( + compute.AddInstanceTargetPoolRequest(), project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_add_instance_request_resource=compute.TargetPoolsAddInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) -def test_aggregated_list_rest_pager(transport: str = "rest"): +def test_add_instance_rest_error(): client = TargetPoolsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetPoolAggregatedList( - items={ - "a": compute.TargetPoolsScopedList(), - "b": compute.TargetPoolsScopedList(), - "c": compute.TargetPoolsScopedList(), - }, - next_page_token="abc", - ), - compute.TargetPoolAggregatedList( - items={}, - next_page_token="def", - ), - compute.TargetPoolAggregatedList( - items={ - "g": compute.TargetPoolsScopedList(), - }, - next_page_token="ghi", - ), - compute.TargetPoolAggregatedList( - items={ - "h": compute.TargetPoolsScopedList(), - "i": compute.TargetPoolsScopedList(), - }, - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.TargetPoolAggregatedList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.aggregated_list(request=sample_request) - - assert isinstance(pager.get("a"), compute.TargetPoolsScopedList) - assert pager.get("h") is None - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, tuple) for i in results) - for result in results: - assert isinstance(result, tuple) - assert tuple(type(t) for t in result) == ( - str, - compute.TargetPoolsScopedList, - ) - - assert pager.get("a") is None - assert isinstance(pager.get("h"), compute.TargetPoolsScopedList) - - pages = list(client.aggregated_list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.DeleteTargetPoolRequest, + compute.AddInstanceTargetPoolRequest, dict, ], ) -def test_delete_unary_rest(request_type): +def test_add_instance_unary_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1559,6 +1526,9 @@ def test_delete_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_add_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -1595,36 +1565,14 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_instance_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetPoolRequest, +def test_add_instance_unary_rest_required_fields( + request_type=compute.AddInstanceTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport @@ -1643,7 +1591,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_instance._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1654,7 +1602,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).add_instance._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1685,9 +1633,10 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -1696,19 +1645,19 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.add_instance_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_add_instance_unary_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.add_instance._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -1716,13 +1665,14 @@ def test_delete_unary_rest_unset_required_fields(): "project", "region", "targetPool", + "targetPoolsAddInstanceRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_add_instance_unary_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1735,9 +1685,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_delete" + transports.TargetPoolsRestInterceptor, "post_add_instance" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_delete" + transports.TargetPoolsRestInterceptor, "pre_add_instance" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1754,7 +1704,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.DeleteTargetPoolRequest() + request = compute.AddInstanceTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -1762,7 +1712,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.add_instance_unary( request, metadata=[ ("key", "val"), @@ -1774,8 +1724,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteTargetPoolRequest +def test_add_instance_unary_rest_bad_request( + transport: str = "rest", request_type=compute.AddInstanceTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1784,6 +1734,9 @@ def test_delete_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_add_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1795,10 +1748,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.add_instance_unary(request) -def test_delete_unary_rest_flattened(): +def test_add_instance_unary_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1821,6 +1774,9 @@ def test_delete_unary_rest_flattened(): project="project_value", region="region_value", target_pool="target_pool_value", + target_pools_add_instance_request_resource=compute.TargetPoolsAddInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) mock_args.update(sample_request) @@ -1832,20 +1788,20 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.add_instance_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/addInstance" % client.transport._host, args[1], ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_add_instance_unary_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1854,15 +1810,18 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteTargetPoolRequest(), + client.add_instance_unary( + compute.AddInstanceTargetPoolRequest(), project="project_value", region="region_value", target_pool="target_pool_value", + target_pools_add_instance_request_resource=compute.TargetPoolsAddInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), ) -def test_delete_unary_rest_error(): +def test_add_instance_unary_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1871,69 +1830,55 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetPoolRequest, + compute.AggregatedListTargetPoolsRequest, dict, ], ) -def test_get_rest(request_type): +def test_aggregated_list_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPool( - backup_pool="backup_pool_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - failover_ratio=0.1494, - health_checks=["health_checks_value"], - id=205, - instances=["instances_value"], + return_value = compute.TargetPoolAggregatedList( + id="id_value", kind="kind_value", - name="name_value", - region="region_value", + next_page_token="next_page_token_value", self_link="self_link_value", - session_affinity="session_affinity_value", + unreachables=["unreachables_value"], ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPool.to_json(return_value) + json_return_value = compute.TargetPoolAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.aggregated_list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetPool) - assert response.backup_pool == "backup_pool_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert math.isclose(response.failover_ratio, 0.1494, rel_tol=1e-6) - assert response.health_checks == ["health_checks_value"] - assert response.id == 205 - assert response.instances == ["instances_value"] + assert isinstance(response, pagers.AggregatedListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.session_affinity == "session_affinity_value" + assert response.unreachables == ["unreachables_value"] -def test_get_rest_required_fields(request_type=compute.GetTargetPoolRequest): +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListTargetPoolsRequest, +): transport_class = transports.TargetPoolsRestTransport request_init = {} request_init["project"] = "" - request_init["region"] = "" - request_init["target_pool"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1945,27 +1890,32 @@ def test_get_rest_required_fields(request_type=compute.GetTargetPoolRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["region"] = "region_value" - jsonified_request["targetPool"] = "target_pool_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).aggregated_list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "include_all_scopes", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "region" in jsonified_request - assert jsonified_request["region"] == "region_value" - assert "targetPool" in jsonified_request - assert jsonified_request["targetPool"] == "target_pool_value" client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1974,7 +1924,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetPoolRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetPool() + return_value = compute.TargetPoolAggregatedList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1992,37 +1942,40 @@ def test_get_rest_required_fields(request_type=compute.GetTargetPoolRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPool.to_json(return_value) + json_return_value = compute.TargetPoolAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.aggregated_list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_aggregated_list_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.aggregated_list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) - & set( + set( ( - "project", - "region", - "targetPool", + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", ) ) + & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_aggregated_list_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2035,9 +1988,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_get" + transports.TargetPoolsRestInterceptor, "post_aggregated_list" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_get" + transports.TargetPoolsRestInterceptor, "pre_aggregated_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2052,17 +2005,19 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetPool.to_json(compute.TargetPool()) + req.return_value._content = compute.TargetPoolAggregatedList.to_json( + compute.TargetPoolAggregatedList() + ) - request = compute.GetTargetPoolRequest() + request = compute.AggregatedListTargetPoolsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPool + post.return_value = compute.TargetPoolAggregatedList - client.get( + client.aggregated_list( request, metadata=[ ("key", "val"), @@ -2074,8 +2029,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetPoolRequest +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListTargetPoolsRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2083,7 +2038,7 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init = {"project": "sample1"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2095,10 +2050,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.aggregated_list(request) -def test_get_rest_flattened(): +def test_aggregated_list_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2107,45 +2062,39 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPool() + return_value = compute.TargetPoolAggregatedList() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "target_pool": "sample3", - } + sample_request = {"project": "sample1"} # get truthy value for each flattened field mock_args = dict( project="project_value", - region="region_value", - target_pool="target_pool_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPool.to_json(return_value) + json_return_value = compute.TargetPoolAggregatedList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.aggregated_list(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}" + "%s/compute/v1/projects/{project}/aggregated/targetPools" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_aggregated_list_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2154,28 +2103,93 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetPoolRequest(), + client.aggregated_list( + compute.AggregatedListTargetPoolsRequest(), project="project_value", - region="region_value", - target_pool="target_pool_value", ) -def test_get_rest_error(): +def test_aggregated_list_rest_pager(transport: str = "rest"): client = TargetPoolsClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetPoolAggregatedList( + items={ + "a": compute.TargetPoolsScopedList(), + "b": compute.TargetPoolsScopedList(), + "c": compute.TargetPoolsScopedList(), + }, + next_page_token="abc", + ), + compute.TargetPoolAggregatedList( + items={}, + next_page_token="def", + ), + compute.TargetPoolAggregatedList( + items={ + "g": compute.TargetPoolsScopedList(), + }, + next_page_token="ghi", + ), + compute.TargetPoolAggregatedList( + items={ + "h": compute.TargetPoolsScopedList(), + "i": compute.TargetPoolsScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetPoolAggregatedList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.aggregated_list(request=sample_request) + + assert isinstance(pager.get("a"), compute.TargetPoolsScopedList) + assert pager.get("h") is None + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, tuple) for i in results) + for result in results: + assert isinstance(result, tuple) + assert tuple(type(t) for t in result) == ( + str, + compute.TargetPoolsScopedList, + ) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.TargetPoolsScopedList) + + pages = list(client.aggregated_list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - compute.GetHealthTargetPoolRequest, + compute.DeleteTargetPoolRequest, dict, ], ) -def test_get_health_rest(request_type): +def test_delete_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2183,32 +2197,71 @@ def test_get_health_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["instance_reference_resource"] = {"instance": "instance_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolInstanceHealth( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolInstanceHealth.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_health(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetPoolInstanceHealth) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_health_rest_required_fields( - request_type=compute.GetHealthTargetPoolRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteTargetPoolRequest): transport_class = transports.TargetPoolsRestTransport request_init = {} @@ -2226,7 +2279,7 @@ def test_get_health_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_health._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2237,7 +2290,9 @@ def test_get_health_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_health._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2255,7 +2310,7 @@ def test_get_health_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolInstanceHealth() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2266,36 +2321,34 @@ def test_get_health_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolInstanceHealth.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_health(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_health_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_health._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( - "instanceReferenceResource", "project", "region", "targetPool", @@ -2305,7 +2358,7 @@ def test_get_health_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_health_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2318,9 +2371,9 @@ def test_get_health_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_get_health" + transports.TargetPoolsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_get_health" + transports.TargetPoolsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2335,19 +2388,17 @@ def test_get_health_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetPoolInstanceHealth.to_json( - compute.TargetPoolInstanceHealth() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetHealthTargetPoolRequest() + request = compute.DeleteTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPoolInstanceHealth + post.return_value = compute.Operation - client.get_health( + client.delete( request, metadata=[ ("key", "val"), @@ -2359,8 +2410,8 @@ def test_get_health_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_health_rest_bad_request( - transport: str = "rest", request_type=compute.GetHealthTargetPoolRequest +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2369,7 +2420,6 @@ def test_get_health_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["instance_reference_resource"] = {"instance": "instance_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2381,10 +2431,10 @@ def test_get_health_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_health(request) + client.delete(request) -def test_get_health_rest_flattened(): +def test_delete_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2393,7 +2443,7 @@ def test_get_health_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolInstanceHealth() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -2407,34 +2457,31 @@ def test_get_health_rest_flattened(): project="project_value", region="region_value", target_pool="target_pool_value", - instance_reference_resource=compute.InstanceReference( - instance="instance_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolInstanceHealth.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_health(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/getHealth" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}" % client.transport._host, args[1], ) -def test_get_health_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2443,18 +2490,15 @@ def test_get_health_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_health( - compute.GetHealthTargetPoolRequest(), + client.delete( + compute.DeleteTargetPoolRequest(), project="project_value", region="region_value", target_pool="target_pool_value", - instance_reference_resource=compute.InstanceReference( - instance="instance_value" - ), ) -def test_get_health_rest_error(): +def test_delete_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2463,32 +2507,18 @@ def test_get_health_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertTargetPoolRequest, + compute.DeleteTargetPoolRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_delete_unary_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["target_pool_resource"] = { - "backup_pool": "backup_pool_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "failover_ratio": 0.1494, - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "id": 205, - "instances": ["instances_value_1", "instances_value_2"], - "kind": "kind_value", - "name": "name_value", - "region": "region_value", - "self_link": "self_link_value", - "session_affinity": "session_affinity_value", - } + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2525,42 +2555,21 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertTargetPoolRequest, +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["target_pool"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2572,17 +2581,18 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2592,6 +2602,8 @@ def test_insert_unary_rest_required_fields( assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2611,10 +2623,9 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "delete", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() @@ -2623,33 +2634,33 @@ def test_insert_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", "region", - "targetPoolResource", + "targetPool", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2662,9 +2673,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_insert" + transports.TargetPoolsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_insert" + transports.TargetPoolsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2681,7 +2692,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InsertTargetPoolRequest() + request = compute.DeleteTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2689,7 +2700,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.insert_unary( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -2701,8 +2712,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertTargetPoolRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2710,21 +2721,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["target_pool_resource"] = { - "backup_pool": "backup_pool_value", - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "failover_ratio": 0.1494, - "health_checks": ["health_checks_value_1", "health_checks_value_2"], - "id": 205, - "instances": ["instances_value_1", "instances_value_2"], - "kind": "kind_value", - "name": "name_value", - "region": "region_value", - "self_link": "self_link_value", - "session_affinity": "session_affinity_value", - } + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2736,10 +2733,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.delete_unary(request) -def test_insert_unary_rest_flattened(): +def test_delete_unary_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2751,13 +2748,17 @@ def test_insert_unary_rest_flattened(): return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - target_pool_resource=compute.TargetPool(backup_pool="backup_pool_value"), + target_pool="target_pool_value", ) mock_args.update(sample_request) @@ -2769,20 +2770,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2791,15 +2792,15 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertTargetPoolRequest(), + client.delete_unary( + compute.DeleteTargetPoolRequest(), project="project_value", region="region_value", - target_pool_resource=compute.TargetPool(backup_pool="backup_pool_value"), + target_pool="target_pool_value", ) -def test_insert_unary_rest_error(): +def test_delete_unary_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2808,52 +2809,69 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListTargetPoolsRequest, + compute.GetTargetPoolRequest, dict, ], ) -def test_list_rest(request_type): +def test_get_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolList( - id="id_value", + return_value = compute.TargetPool( + backup_pool="backup_pool_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + failover_ratio=0.1494, + health_checks=["health_checks_value"], + id=205, + instances=["instances_value"], kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + region="region_value", self_link="self_link_value", + session_affinity="session_affinity_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolList.to_json(return_value) + json_return_value = compute.TargetPool.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, compute.TargetPool) + assert response.backup_pool == "backup_pool_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert math.isclose(response.failover_ratio, 0.1494, rel_tol=1e-6) + assert response.health_checks == ["health_checks_value"] + assert response.id == 205 + assert response.instances == ["instances_value"] assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.session_affinity == "session_affinity_value" -def test_list_rest_required_fields(request_type=compute.ListTargetPoolsRequest): +def test_get_rest_required_fields(request_type=compute.GetTargetPoolRequest): transport_class = transports.TargetPoolsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["target_pool"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2865,27 +2883,18 @@ def test_list_rest_required_fields(request_type=compute.ListTargetPoolsRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2893,6 +2902,8 @@ def test_list_rest_required_fields(request_type=compute.ListTargetPoolsRequest): assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2901,7 +2912,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetPoolsRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolList() + return_value = compute.TargetPool() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2919,44 +2930,37 @@ def test_list_rest_required_fields(request_type=compute.ListTargetPoolsRequest): response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolList.to_json(return_value) + json_return_value = compute.TargetPool.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(()) & set( ( "project", "region", + "targetPool", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2969,9 +2973,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_list" + transports.TargetPoolsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_list" + transports.TargetPoolsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2986,19 +2990,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetPoolList.to_json( - compute.TargetPoolList() - ) + req.return_value._content = compute.TargetPool.to_json(compute.TargetPool()) - request = compute.ListTargetPoolsRequest() + request = compute.GetTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPoolList + post.return_value = compute.TargetPool - client.list( + client.get( request, metadata=[ ("key", "val"), @@ -3010,8 +3012,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListTargetPoolsRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3019,7 +3021,7 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3031,10 +3033,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.get(request) -def test_list_rest_flattened(): +def test_get_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3043,40 +3045,45 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetPoolList() + return_value = compute.TargetPool() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + target_pool="target_pool_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetPoolList.to_json(return_value) + json_return_value = compute.TargetPool.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3085,82 +3092,2334 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListTargetPoolsRequest(), + client.get( + compute.GetTargetPoolRequest(), project="project_value", region="region_value", + target_pool="target_pool_value", ) -def test_list_rest_pager(transport: str = "rest"): +def test_get_rest_error(): client = TargetPoolsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetPoolList( - items=[ - compute.TargetPool(), - compute.TargetPool(), - compute.TargetPool(), - ], - next_page_token="abc", - ), - compute.TargetPoolList( - items=[], - next_page_token="def", + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetHealthTargetPoolRequest, + dict, + ], +) +def test_get_health_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["instance_reference_resource"] = {"instance": "instance_value"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetPoolInstanceHealth( + kind="kind_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetPoolInstanceHealth.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_health(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.TargetPoolInstanceHealth) + assert response.kind == "kind_value" + + +def test_get_health_rest_required_fields( + request_type=compute.GetHealthTargetPoolRequest, +): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_pool"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_health._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_health._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetPoolInstanceHealth() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetPoolInstanceHealth.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_health(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_health_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_health._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "instanceReferenceResource", + "project", + "region", + "targetPool", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_health_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_get_health" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_get_health" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetPoolInstanceHealth.to_json( + compute.TargetPoolInstanceHealth() + ) + + request = compute.GetHealthTargetPoolRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetPoolInstanceHealth + + client.get_health( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_health_rest_bad_request( + transport: str = "rest", request_type=compute.GetHealthTargetPoolRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["instance_reference_resource"] = {"instance": "instance_value"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_health(request) + + +def test_get_health_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetPoolInstanceHealth() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_pool="target_pool_value", + instance_reference_resource=compute.InstanceReference( + instance="instance_value" ), - compute.TargetPoolList( - items=[ - compute.TargetPool(), - ], - next_page_token="ghi", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetPoolInstanceHealth.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_health(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/getHealth" + % client.transport._host, + args[1], + ) + + +def test_get_health_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_health( + compute.GetHealthTargetPoolRequest(), + project="project_value", + region="region_value", + target_pool="target_pool_value", + instance_reference_resource=compute.InstanceReference( + instance="instance_value" ), - compute.TargetPoolList( - items=[ - compute.TargetPool(), - compute.TargetPool(), - ], + ) + + +def test_get_health_rest_error(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetPoolRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_pool_resource"] = { + "backup_pool": "backup_pool_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "failover_ratio": 0.1494, + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "id": 205, + "instances": ["instances_value_1", "instances_value_2"], + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertTargetPoolRequest): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetPoolResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetPoolRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetPoolRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_pool_resource"] = { + "backup_pool": "backup_pool_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "failover_ratio": 0.1494, + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "id": 205, + "instances": ["instances_value_1", "instances_value_2"], + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_pool_resource=compute.TargetPool(backup_pool="backup_pool_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertTargetPoolRequest(), + project="project_value", + region="region_value", + target_pool_resource=compute.TargetPool(backup_pool="backup_pool_value"), + ) + + +def test_insert_rest_error(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetPoolRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_pool_resource"] = { + "backup_pool": "backup_pool_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "failover_ratio": 0.1494, + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "id": 205, + "instances": ["instances_value_1", "instances_value_2"], + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertTargetPoolRequest, +): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetPoolResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetPoolRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetPoolRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_pool_resource"] = { + "backup_pool": "backup_pool_value", + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "failover_ratio": 0.1494, + "health_checks": ["health_checks_value_1", "health_checks_value_2"], + "id": 205, + "instances": ["instances_value_1", "instances_value_2"], + "kind": "kind_value", + "name": "name_value", + "region": "region_value", + "self_link": "self_link_value", + "session_affinity": "session_affinity_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_pool_resource=compute.TargetPool(backup_pool="backup_pool_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertTargetPoolRequest(), + project="project_value", + region="region_value", + target_pool_resource=compute.TargetPool(backup_pool="backup_pool_value"), + ) + + +def test_insert_unary_rest_error(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListTargetPoolsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetPoolList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetPoolList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListTargetPoolsRequest): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetPoolList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetPoolList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set( + ( + "project", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetPoolList.to_json( + compute.TargetPoolList() + ) + + request = compute.ListTargetPoolsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetPoolList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListTargetPoolsRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetPoolList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetPoolList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListTargetPoolsRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetPoolList( + items=[ + compute.TargetPool(), + compute.TargetPool(), + compute.TargetPool(), + ], + next_page_token="abc", + ), + compute.TargetPoolList( + items=[], + next_page_token="def", + ), + compute.TargetPoolList( + items=[ + compute.TargetPool(), + ], + next_page_token="ghi", + ), + compute.TargetPoolList( + items=[ + compute.TargetPool(), + compute.TargetPool(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetPoolList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetPool) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveHealthCheckTargetPoolRequest, + dict, + ], +) +def test_remove_health_check_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_remove_health_check_request_resource"] = { + "health_checks": [{"health_check": "health_check_value"}] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_health_check(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_remove_health_check_rest_required_fields( + request_type=compute.RemoveHealthCheckTargetPoolRequest, +): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_pool"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_health_check._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_health_check._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_health_check(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_health_check_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_health_check._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetPool", + "targetPoolsRemoveHealthCheckRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_health_check_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_remove_health_check" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_remove_health_check" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveHealthCheckTargetPoolRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_health_check( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_health_check_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveHealthCheckTargetPoolRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_remove_health_check_request_resource"] = { + "health_checks": [{"health_check": "health_check_value"}] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_health_check(request) + + +def test_remove_health_check_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_remove_health_check_request_resource=compute.TargetPoolsRemoveHealthCheckRequest( + health_checks=[ + compute.HealthCheckReference(health_check="health_check_value") + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_health_check(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/removeHealthCheck" + % client.transport._host, + args[1], + ) + + +def test_remove_health_check_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_health_check( + compute.RemoveHealthCheckTargetPoolRequest(), + project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_remove_health_check_request_resource=compute.TargetPoolsRemoveHealthCheckRequest( + health_checks=[ + compute.HealthCheckReference(health_check="health_check_value") + ] + ), + ) + + +def test_remove_health_check_rest_error(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveHealthCheckTargetPoolRequest, + dict, + ], +) +def test_remove_health_check_unary_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_remove_health_check_request_resource"] = { + "health_checks": [{"health_check": "health_check_value"}] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_health_check_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_remove_health_check_unary_rest_required_fields( + request_type=compute.RemoveHealthCheckTargetPoolRequest, +): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_pool"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_health_check._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_health_check._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_health_check_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_health_check_unary_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_health_check._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetPool", + "targetPoolsRemoveHealthCheckRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_health_check_unary_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_remove_health_check" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_remove_health_check" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveHealthCheckTargetPoolRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_health_check_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_health_check_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveHealthCheckTargetPoolRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_remove_health_check_request_resource"] = { + "health_checks": [{"health_check": "health_check_value"}] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_health_check_unary(request) + + +def test_remove_health_check_unary_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_remove_health_check_request_resource=compute.TargetPoolsRemoveHealthCheckRequest( + health_checks=[ + compute.HealthCheckReference(health_check="health_check_value") + ] + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.remove_health_check_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/removeHealthCheck" + % client.transport._host, + args[1], + ) + + +def test_remove_health_check_unary_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_health_check_unary( + compute.RemoveHealthCheckTargetPoolRequest(), + project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_remove_health_check_request_resource=compute.TargetPoolsRemoveHealthCheckRequest( + health_checks=[ + compute.HealthCheckReference(health_check="health_check_value") + ] + ), + ) + + +def test_remove_health_check_unary_rest_error(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.RemoveInstanceTargetPoolRequest, + dict, + ], +) +def test_remove_instance_rest(request_type): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_remove_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.remove_instance(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_remove_instance_rest_required_fields( + request_type=compute.RemoveInstanceTargetPoolRequest, +): + transport_class = transports.TargetPoolsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_pool"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_instance._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetPool"] = "target_pool_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).remove_instance._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetPool" in jsonified_request + assert jsonified_request["targetPool"] == "target_pool_value" + + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.remove_instance(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_remove_instance_rest_unset_required_fields(): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.remove_instance._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetPool", + "targetPoolsRemoveInstanceRequestResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_remove_instance_rest_interceptors(null_interceptor): + transport = transports.TargetPoolsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetPoolsRestInterceptor(), + ) + client = TargetPoolsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetPoolsRestInterceptor, "post_remove_instance" + ) as post, mock.patch.object( + transports.TargetPoolsRestInterceptor, "pre_remove_instance" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.RemoveInstanceTargetPoolRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.remove_instance( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_remove_instance_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveInstanceTargetPoolRequest +): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} + request_init["target_pools_remove_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.remove_instance(request) + + +def test_remove_instance_rest_flattened(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_pool": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_remove_instance_request_resource=compute.TargetPoolsRemoveInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] ), ) - # Two responses for two calls - response = response + response + mock_args.update(sample_request) - # Wrap the values into proper Response objs - response = tuple(compute.TargetPoolList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) - sample_request = {"project": "sample1", "region": "sample2"} + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - pager = client.list(request=sample_request) + client.remove_instance(**mock_args) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetPool) for i in results) + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/removeInstance" + % client.transport._host, + args[1], + ) - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token + +def test_remove_instance_rest_flattened_error(transport: str = "rest"): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.remove_instance( + compute.RemoveInstanceTargetPoolRequest(), + project="project_value", + region="region_value", + target_pool="target_pool_value", + target_pools_remove_instance_request_resource=compute.TargetPoolsRemoveInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] + ), + ) + + +def test_remove_instance_rest_error(): + client = TargetPoolsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) @pytest.mark.parametrize( "request_type", [ - compute.RemoveHealthCheckTargetPoolRequest, + compute.RemoveInstanceTargetPoolRequest, dict, ], ) -def test_remove_health_check_unary_rest(request_type): +def test_remove_instance_unary_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3168,8 +5427,8 @@ def test_remove_health_check_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["target_pools_remove_health_check_request_resource"] = { - "health_checks": [{"health_check": "health_check_value"}] + request_init["target_pools_remove_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] } request = request_type(request_init) @@ -3207,36 +5466,14 @@ def test_remove_health_check_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_health_check_unary(request) + response = client.remove_instance_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_remove_health_check_unary_rest_required_fields( - request_type=compute.RemoveHealthCheckTargetPoolRequest, +def test_remove_instance_unary_rest_required_fields( + request_type=compute.RemoveInstanceTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport @@ -3255,7 +5492,7 @@ def test_remove_health_check_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_health_check._get_unset_required_fields(jsonified_request) + ).remove_instance._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3266,7 +5503,7 @@ def test_remove_health_check_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_health_check._get_unset_required_fields(jsonified_request) + ).remove_instance._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3309,19 +5546,19 @@ def test_remove_health_check_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_health_check_unary(request) + response = client.remove_instance_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_health_check_unary_rest_unset_required_fields(): +def test_remove_instance_unary_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_health_check._get_unset_required_fields({}) + unset_fields = transport.remove_instance._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -3329,14 +5566,14 @@ def test_remove_health_check_unary_rest_unset_required_fields(): "project", "region", "targetPool", - "targetPoolsRemoveHealthCheckRequestResource", + "targetPoolsRemoveInstanceRequestResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_health_check_unary_rest_interceptors(null_interceptor): +def test_remove_instance_unary_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3349,9 +5586,9 @@ def test_remove_health_check_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_remove_health_check" + transports.TargetPoolsRestInterceptor, "post_remove_instance" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_remove_health_check" + transports.TargetPoolsRestInterceptor, "pre_remove_instance" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3368,7 +5605,7 @@ def test_remove_health_check_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveHealthCheckTargetPoolRequest() + request = compute.RemoveInstanceTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3376,7 +5613,7 @@ def test_remove_health_check_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_health_check_unary( + client.remove_instance_unary( request, metadata=[ ("key", "val"), @@ -3388,8 +5625,8 @@ def test_remove_health_check_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_health_check_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemoveHealthCheckTargetPoolRequest +def test_remove_instance_unary_rest_bad_request( + transport: str = "rest", request_type=compute.RemoveInstanceTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3398,8 +5635,8 @@ def test_remove_health_check_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["target_pools_remove_health_check_request_resource"] = { - "health_checks": [{"health_check": "health_check_value"}] + request_init["target_pools_remove_instance_request_resource"] = { + "instances": [{"instance": "instance_value"}] } request = request_type(request_init) @@ -3412,10 +5649,10 @@ def test_remove_health_check_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_health_check_unary(request) + client.remove_instance_unary(request) -def test_remove_health_check_unary_rest_flattened(): +def test_remove_instance_unary_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3438,10 +5675,8 @@ def test_remove_health_check_unary_rest_flattened(): project="project_value", region="region_value", target_pool="target_pool_value", - target_pools_remove_health_check_request_resource=compute.TargetPoolsRemoveHealthCheckRequest( - health_checks=[ - compute.HealthCheckReference(health_check="health_check_value") - ] + target_pools_remove_instance_request_resource=compute.TargetPoolsRemoveInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] ), ) mock_args.update(sample_request) @@ -3454,20 +5689,20 @@ def test_remove_health_check_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_health_check_unary(**mock_args) + client.remove_instance_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/removeHealthCheck" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/removeInstance" % client.transport._host, args[1], ) -def test_remove_health_check_unary_rest_flattened_error(transport: str = "rest"): +def test_remove_instance_unary_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3476,20 +5711,18 @@ def test_remove_health_check_unary_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_health_check_unary( - compute.RemoveHealthCheckTargetPoolRequest(), + client.remove_instance_unary( + compute.RemoveInstanceTargetPoolRequest(), project="project_value", region="region_value", target_pool="target_pool_value", - target_pools_remove_health_check_request_resource=compute.TargetPoolsRemoveHealthCheckRequest( - health_checks=[ - compute.HealthCheckReference(health_check="health_check_value") - ] + target_pools_remove_instance_request_resource=compute.TargetPoolsRemoveInstanceRequest( + instances=[compute.InstanceReference(instance="instance_value")] ), ) -def test_remove_health_check_unary_rest_error(): +def test_remove_instance_unary_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3498,11 +5731,11 @@ def test_remove_health_check_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.RemoveInstanceTargetPoolRequest, + compute.SetBackupTargetPoolRequest, dict, ], ) -def test_remove_instance_unary_rest(request_type): +def test_set_backup_rest(request_type): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3510,9 +5743,7 @@ def test_remove_instance_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["target_pools_remove_instance_request_resource"] = { - "instances": [{"instance": "instance_value"}] - } + request_init["target_reference_resource"] = {"target": "target_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -3549,10 +5780,10 @@ def test_remove_instance_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_instance_unary(request) + response = client.set_backup(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -3577,8 +5808,8 @@ def test_remove_instance_unary_rest(request_type): assert response.zone == "zone_value" -def test_remove_instance_unary_rest_required_fields( - request_type=compute.RemoveInstanceTargetPoolRequest, +def test_set_backup_rest_required_fields( + request_type=compute.SetBackupTargetPoolRequest, ): transport_class = transports.TargetPoolsRestTransport @@ -3597,7 +5828,7 @@ def test_remove_instance_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_instance._get_unset_required_fields(jsonified_request) + ).set_backup._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3608,9 +5839,14 @@ def test_remove_instance_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).remove_instance._get_unset_required_fields(jsonified_request) + ).set_backup._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "failover_ratio", + "request_id", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -3651,34 +5887,39 @@ def test_remove_instance_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.remove_instance_unary(request) + response = client.set_backup(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_remove_instance_unary_rest_unset_required_fields(): +def test_set_backup_rest_unset_required_fields(): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.remove_instance._get_unset_required_fields({}) + unset_fields = transport.set_backup._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "failoverRatio", + "requestId", + ) + ) & set( ( "project", "region", "targetPool", - "targetPoolsRemoveInstanceRequestResource", + "targetReferenceResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_remove_instance_unary_rest_interceptors(null_interceptor): +def test_set_backup_rest_interceptors(null_interceptor): transport = transports.TargetPoolsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -3691,9 +5932,9 @@ def test_remove_instance_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetPoolsRestInterceptor, "post_remove_instance" + transports.TargetPoolsRestInterceptor, "post_set_backup" ) as post, mock.patch.object( - transports.TargetPoolsRestInterceptor, "pre_remove_instance" + transports.TargetPoolsRestInterceptor, "pre_set_backup" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3710,7 +5951,7 @@ def test_remove_instance_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.RemoveInstanceTargetPoolRequest() + request = compute.SetBackupTargetPoolRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3718,7 +5959,7 @@ def test_remove_instance_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.remove_instance_unary( + client.set_backup( request, metadata=[ ("key", "val"), @@ -3730,8 +5971,8 @@ def test_remove_instance_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_remove_instance_unary_rest_bad_request( - transport: str = "rest", request_type=compute.RemoveInstanceTargetPoolRequest +def test_set_backup_rest_bad_request( + transport: str = "rest", request_type=compute.SetBackupTargetPoolRequest ): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3740,9 +5981,7 @@ def test_remove_instance_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2", "target_pool": "sample3"} - request_init["target_pools_remove_instance_request_resource"] = { - "instances": [{"instance": "instance_value"}] - } + request_init["target_reference_resource"] = {"target": "target_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3754,10 +5993,10 @@ def test_remove_instance_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.remove_instance_unary(request) + client.set_backup(request) -def test_remove_instance_unary_rest_flattened(): +def test_set_backup_rest_flattened(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3780,9 +6019,7 @@ def test_remove_instance_unary_rest_flattened(): project="project_value", region="region_value", target_pool="target_pool_value", - target_pools_remove_instance_request_resource=compute.TargetPoolsRemoveInstanceRequest( - instances=[compute.InstanceReference(instance="instance_value")] - ), + target_reference_resource=compute.TargetReference(target="target_value"), ) mock_args.update(sample_request) @@ -3794,20 +6031,20 @@ def test_remove_instance_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.remove_instance_unary(**mock_args) + client.set_backup(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/removeInstance" + "%s/compute/v1/projects/{project}/regions/{region}/targetPools/{target_pool}/setBackup" % client.transport._host, args[1], ) -def test_remove_instance_unary_rest_flattened_error(transport: str = "rest"): +def test_set_backup_rest_flattened_error(transport: str = "rest"): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3816,18 +6053,16 @@ def test_remove_instance_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.remove_instance_unary( - compute.RemoveInstanceTargetPoolRequest(), + client.set_backup( + compute.SetBackupTargetPoolRequest(), project="project_value", region="region_value", target_pool="target_pool_value", - target_pools_remove_instance_request_resource=compute.TargetPoolsRemoveInstanceRequest( - instances=[compute.InstanceReference(instance="instance_value")] - ), + target_reference_resource=compute.TargetReference(target="target_value"), ) -def test_remove_instance_unary_rest_error(): +def test_set_backup_rest_error(): client = TargetPoolsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3889,28 +6124,6 @@ def test_set_backup_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_backup_unary_rest_required_fields( @@ -4248,6 +6461,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetPoolsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_pools_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4289,6 +6515,14 @@ def test_target_pools_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_pools_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_ssl_proxies.py b/tests/unit/gapic/compute_v1/test_target_ssl_proxies.py index eb4a563df..d6a506442 100644 --- a/tests/unit/gapic/compute_v1/test_target_ssl_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_ssl_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_target_ssl_proxies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -589,10 +591,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -617,9 +619,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetSslProxyRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteTargetSslProxyRequest): transport_class = transports.TargetSslProxiesRestTransport request_init = {} @@ -686,14 +686,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -711,7 +711,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -751,7 +751,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -763,7 +763,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteTargetSslProxyRequest ): client = TargetSslProxiesClient( @@ -784,10 +784,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -816,7 +816,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -829,7 +829,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -838,14 +838,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteTargetSslProxyRequest(), project="project_value", target_ssl_proxy="target_ssl_proxy_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -854,11 +854,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetSslProxyRequest, + compute.DeleteTargetSslProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -871,42 +871,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetSslProxy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - proxy_header="proxy_header_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - service="service_value", - ssl_certificates=["ssl_certificates_value"], - ssl_policy="ssl_policy_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetSslProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetSslProxy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.proxy_header == "proxy_header_value" - assert response.self_link == "self_link_value" - assert response.service == "service_value" - assert response.ssl_certificates == ["ssl_certificates_value"] - assert response.ssl_policy == "ssl_policy_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetTargetSslProxyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetSslProxyRequest, +): transport_class = transports.TargetSslProxiesRestTransport request_init = {} @@ -923,7 +927,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetSslProxyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -933,7 +937,9 @@ def test_get_rest_required_fields(request_type=compute.GetTargetSslProxyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -949,7 +955,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetSslProxyRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetSslProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -960,32 +966,32 @@ def test_get_rest_required_fields(request_type=compute.GetTargetSslProxyRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetSslProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -996,7 +1002,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1009,9 +1015,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "post_get" + transports.TargetSslProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "pre_get" + transports.TargetSslProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1026,19 +1032,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetSslProxy.to_json( - compute.TargetSslProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetSslProxyRequest() + request = compute.DeleteTargetSslProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetSslProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1050,8 +1054,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetSslProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetSslProxyRequest ): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1071,10 +1075,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1083,7 +1087,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetSslProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "target_ssl_proxy": "sample2"} @@ -1098,12 +1102,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetSslProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1116,7 +1120,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1125,14 +1129,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetSslProxyRequest(), + client.delete_unary( + compute.DeleteTargetSslProxyRequest(), project="project_value", target_ssl_proxy="target_ssl_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1141,101 +1145,64 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertTargetSslProxyRequest, + compute.GetTargetSslProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_ssl_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_header": "proxy_header_value", - "self_link": "self_link_value", - "service": "service_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - } + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetSslProxy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + proxy_header="proxy_header_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + service="service_value", + ssl_certificates=["ssl_certificates_value"], + ssl_policy="ssl_policy_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetSslProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetSslProxy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.proxy_header == "proxy_header_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.service == "service_value" + assert response.ssl_certificates == ["ssl_certificates_value"] + assert response.ssl_policy == "ssl_policy_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertTargetSslProxyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetTargetSslProxyRequest): transport_class = transports.TargetSslProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_ssl_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1247,23 +1214,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetSslProxy"] = "target_ssl_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetSslProxy" in jsonified_request + assert jsonified_request["targetSslProxy"] == "target_ssl_proxy_value" client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1272,7 +1240,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetSslProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1283,44 +1251,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetSslProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "targetSslProxyResource", + "targetSslProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1333,9 +1300,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "post_insert" + transports.TargetSslProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "pre_insert" + transports.TargetSslProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1350,17 +1317,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetSslProxy.to_json( + compute.TargetSslProxy() + ) - request = compute.InsertTargetSslProxyRequest() + request = compute.GetTargetSslProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetSslProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1372,8 +1341,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertTargetSslProxyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetSslProxyRequest ): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1381,19 +1350,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_ssl_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_header": "proxy_header_value", - "self_link": "self_link_value", - "service": "service_value", - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], - "ssl_policy": "ssl_policy_value", - } + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1405,10 +1362,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1417,42 +1374,40 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetSslProxy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_ssl_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - target_ssl_proxy_resource=compute.TargetSslProxy( - creation_timestamp="creation_timestamp_value" - ), + target_ssl_proxy="target_ssl_proxy_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetSslProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetSslProxies" + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1461,16 +1416,14 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertTargetSslProxyRequest(), + client.get( + compute.GetTargetSslProxyRequest(), project="project_value", - target_ssl_proxy_resource=compute.TargetSslProxy( - creation_timestamp="creation_timestamp_value" - ), + target_ssl_proxy="target_ssl_proxy_value", ) -def test_insert_unary_rest_error(): +def test_get_rest_error(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1479,11 +1432,11 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListTargetSslProxiesRequest, + compute.InsertTargetSslProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_insert_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1491,35 +1444,83 @@ def test_list_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["target_ssl_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetSslProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetSslProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListTargetSslProxiesRequest): +def test_insert_rest_required_fields(request_type=compute.InsertTargetSslProxyRequest): transport_class = transports.TargetSslProxiesRestTransport request_init = {} @@ -1535,7 +1536,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetSslProxiesRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1544,17 +1545,9 @@ def test_list_rest_required_fields(request_type=compute.ListTargetSslProxiesRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1568,7 +1561,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetSslProxiesRequ request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetSslProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1579,46 +1572,44 @@ def test_list_rest_required_fields(request_type=compute.ListTargetSslProxiesRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetSslProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "targetSslProxyResource", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1631,9 +1622,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "post_list" + transports.TargetSslProxiesRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "pre_list" + transports.TargetSslProxiesRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1648,19 +1639,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetSslProxyList.to_json( - compute.TargetSslProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListTargetSslProxiesRequest() + request = compute.InsertTargetSslProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetSslProxyList + post.return_value = compute.Operation - client.list( + client.insert( request, metadata=[ ("key", "val"), @@ -1672,8 +1661,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListTargetSslProxiesRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetSslProxyRequest ): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1682,6 +1671,18 @@ def test_list_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1"} + request_init["target_ssl_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1693,10 +1694,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.insert(request) -def test_list_rest_flattened(): +def test_insert_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1705,7 +1706,7 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetSslProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1"} @@ -1713,18 +1714,21 @@ def test_list_rest_flattened(): # get truthy value for each flattened field mock_args = dict( project="project_value", + target_ssl_proxy_resource=compute.TargetSslProxy( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetSslProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1737,7 +1741,7 @@ def test_list_rest_flattened(): ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1746,81 +1750,1946 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListTargetSslProxiesRequest(), + client.insert( + compute.InsertTargetSslProxyRequest(), project="project_value", + target_ssl_proxy_resource=compute.TargetSslProxy( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_insert_rest_error(): client = TargetSslProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetSslProxyList( - items=[ - compute.TargetSslProxy(), - compute.TargetSslProxy(), - compute.TargetSslProxy(), - ], - next_page_token="abc", - ), - compute.TargetSslProxyList( - items=[], - next_page_token="def", - ), - compute.TargetSslProxyList( - items=[ - compute.TargetSslProxy(), - ], - next_page_token="ghi", - ), - compute.TargetSslProxyList( - items=[ - compute.TargetSslProxy(), - compute.TargetSslProxy(), - ], - ), - ) - # Two responses for two calls - response = response + response - # Wrap the values into proper Response objs - response = tuple(compute.TargetSslProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetSslProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) - sample_request = {"project": "sample1"} + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_ssl_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + } + request = request_type(request_init) - pager = client.list(request=sample_request) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertTargetSslProxyRequest, +): + transport_class = transports.TargetSslProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetSslProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetSslProxiesRestInterceptor(), + ) + client = TargetSslProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetSslProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetSslProxyRequest +): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_ssl_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"], + "ssl_policy": "ssl_policy_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_ssl_proxy_resource=compute.TargetSslProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetSslProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertTargetSslProxyRequest(), + project="project_value", + target_ssl_proxy_resource=compute.TargetSslProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListTargetSslProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetSslProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetSslProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListTargetSslProxiesRequest): + transport_class = transports.TargetSslProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetSslProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetSslProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetSslProxiesRestInterceptor(), + ) + client = TargetSslProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetSslProxyList.to_json( + compute.TargetSslProxyList() + ) + + request = compute.ListTargetSslProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetSslProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListTargetSslProxiesRequest +): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetSslProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetSslProxyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetSslProxies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListTargetSslProxiesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetSslProxyList( + items=[ + compute.TargetSslProxy(), + compute.TargetSslProxy(), + compute.TargetSslProxy(), + ], + next_page_token="abc", + ), + compute.TargetSslProxyList( + items=[], + next_page_token="def", + ), + compute.TargetSslProxyList( + items=[ + compute.TargetSslProxy(), + ], + next_page_token="ghi", + ), + compute.TargetSslProxyList( + items=[ + compute.TargetSslProxy(), + compute.TargetSslProxy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetSslProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetSslProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetBackendServiceTargetSslProxyRequest, + dict, + ], +) +def test_set_backend_service_rest(request_type): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_backend_service(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_backend_service_rest_required_fields( + request_type=compute.SetBackendServiceTargetSslProxyRequest, +): + transport_class = transports.TargetSslProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_ssl_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_backend_service._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetSslProxy"] = "target_ssl_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_backend_service._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetSslProxy" in jsonified_request + assert jsonified_request["targetSslProxy"] == "target_ssl_proxy_value" + + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_backend_service(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_backend_service_rest_unset_required_fields(): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_backend_service._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetSslProxiesSetBackendServiceRequestResource", + "targetSslProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_backend_service_rest_interceptors(null_interceptor): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetSslProxiesRestInterceptor(), + ) + client = TargetSslProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "post_set_backend_service" + ) as post, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "pre_set_backend_service" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetBackendServiceTargetSslProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_backend_service( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_backend_service_rest_bad_request( + transport: str = "rest", request_type=compute.SetBackendServiceTargetSslProxyRequest +): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_backend_service(request) + + +def test_set_backend_service_rest_flattened(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_ssl_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_backend_service_request_resource=compute.TargetSslProxiesSetBackendServiceRequest( + service="service_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_backend_service(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setBackendService" + % client.transport._host, + args[1], + ) + + +def test_set_backend_service_rest_flattened_error(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_backend_service( + compute.SetBackendServiceTargetSslProxyRequest(), + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_backend_service_request_resource=compute.TargetSslProxiesSetBackendServiceRequest( + service="service_value" + ), + ) + + +def test_set_backend_service_rest_error(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetBackendServiceTargetSslProxyRequest, + dict, + ], +) +def test_set_backend_service_unary_rest(request_type): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_backend_service_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_backend_service_unary_rest_required_fields( + request_type=compute.SetBackendServiceTargetSslProxyRequest, +): + transport_class = transports.TargetSslProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_ssl_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_backend_service._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetSslProxy"] = "target_ssl_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_backend_service._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetSslProxy" in jsonified_request + assert jsonified_request["targetSslProxy"] == "target_ssl_proxy_value" + + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_backend_service_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_backend_service_unary_rest_unset_required_fields(): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_backend_service._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetSslProxiesSetBackendServiceRequestResource", + "targetSslProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_backend_service_unary_rest_interceptors(null_interceptor): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetSslProxiesRestInterceptor(), + ) + client = TargetSslProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "post_set_backend_service" + ) as post, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "pre_set_backend_service" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetBackendServiceTargetSslProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_backend_service_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_backend_service_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetBackendServiceTargetSslProxyRequest +): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_backend_service_unary(request) + + +def test_set_backend_service_unary_rest_flattened(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_ssl_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_backend_service_request_resource=compute.TargetSslProxiesSetBackendServiceRequest( + service="service_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_backend_service_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setBackendService" + % client.transport._host, + args[1], + ) + + +def test_set_backend_service_unary_rest_flattened_error(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_backend_service_unary( + compute.SetBackendServiceTargetSslProxyRequest(), + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_backend_service_request_resource=compute.TargetSslProxiesSetBackendServiceRequest( + service="service_value" + ), + ) + + +def test_set_backend_service_unary_rest_error(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetProxyHeaderTargetSslProxyRequest, + dict, + ], +) +def test_set_proxy_header_rest(request_type): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_proxy_header_request_resource"] = { + "proxy_header": "proxy_header_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_proxy_header(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_proxy_header_rest_required_fields( + request_type=compute.SetProxyHeaderTargetSslProxyRequest, +): + transport_class = transports.TargetSslProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_ssl_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_proxy_header._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetSslProxy"] = "target_ssl_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_proxy_header._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetSslProxy" in jsonified_request + assert jsonified_request["targetSslProxy"] == "target_ssl_proxy_value" + + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_proxy_header(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_proxy_header_rest_unset_required_fields(): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_proxy_header._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetSslProxiesSetProxyHeaderRequestResource", + "targetSslProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_proxy_header_rest_interceptors(null_interceptor): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetSslProxiesRestInterceptor(), + ) + client = TargetSslProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "post_set_proxy_header" + ) as post, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "pre_set_proxy_header" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetProxyHeaderTargetSslProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_proxy_header( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_proxy_header_rest_bad_request( + transport: str = "rest", request_type=compute.SetProxyHeaderTargetSslProxyRequest +): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_proxy_header_request_resource"] = { + "proxy_header": "proxy_header_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_proxy_header(request) + + +def test_set_proxy_header_rest_flattened(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_ssl_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_proxy_header_request_resource=compute.TargetSslProxiesSetProxyHeaderRequest( + proxy_header="proxy_header_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_proxy_header(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setProxyHeader" + % client.transport._host, + args[1], + ) + + +def test_set_proxy_header_rest_flattened_error(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_proxy_header( + compute.SetProxyHeaderTargetSslProxyRequest(), + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_proxy_header_request_resource=compute.TargetSslProxiesSetProxyHeaderRequest( + proxy_header="proxy_header_value" + ), + ) + + +def test_set_proxy_header_rest_error(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetProxyHeaderTargetSslProxyRequest, + dict, + ], +) +def test_set_proxy_header_unary_rest(request_type): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_proxy_header_request_resource"] = { + "proxy_header": "proxy_header_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_proxy_header_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_set_proxy_header_unary_rest_required_fields( + request_type=compute.SetProxyHeaderTargetSslProxyRequest, +): + transport_class = transports.TargetSslProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_ssl_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_proxy_header._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetSslProxy"] = "target_ssl_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_proxy_header._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetSslProxy" in jsonified_request + assert jsonified_request["targetSslProxy"] == "target_ssl_proxy_value" + + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_proxy_header_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_proxy_header_unary_rest_unset_required_fields(): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_proxy_header._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetSslProxiesSetProxyHeaderRequestResource", + "targetSslProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_proxy_header_unary_rest_interceptors(null_interceptor): + transport = transports.TargetSslProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetSslProxiesRestInterceptor(), + ) + client = TargetSslProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "post_set_proxy_header" + ) as post, mock.patch.object( + transports.TargetSslProxiesRestInterceptor, "pre_set_proxy_header" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetProxyHeaderTargetSslProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_proxy_header_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_proxy_header_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetProxyHeaderTargetSslProxyRequest +): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} + request_init["target_ssl_proxies_set_proxy_header_request_resource"] = { + "proxy_header": "proxy_header_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_proxy_header_unary(request) + + +def test_set_proxy_header_unary_rest_flattened(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_ssl_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_proxy_header_request_resource=compute.TargetSslProxiesSetProxyHeaderRequest( + proxy_header="proxy_header_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.set_proxy_header_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setProxyHeader" + % client.transport._host, + args[1], + ) + + +def test_set_proxy_header_unary_rest_flattened_error(transport: str = "rest"): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_proxy_header_unary( + compute.SetProxyHeaderTargetSslProxyRequest(), + project="project_value", + target_ssl_proxy="target_ssl_proxy_value", + target_ssl_proxies_set_proxy_header_request_resource=compute.TargetSslProxiesSetProxyHeaderRequest( + proxy_header="proxy_header_value" + ), + ) - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetSslProxy) for i in results) - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token +def test_set_proxy_header_unary_rest_error(): + client = TargetSslProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) @pytest.mark.parametrize( "request_type", [ - compute.SetBackendServiceTargetSslProxyRequest, + compute.SetSslCertificatesTargetSslProxyRequest, dict, ], ) -def test_set_backend_service_unary_rest(request_type): +def test_set_ssl_certificates_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1828,8 +3697,8 @@ def test_set_backend_service_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} - request_init["target_ssl_proxies_set_backend_service_request_resource"] = { - "service": "service_value" + request_init["target_ssl_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] } request = request_type(request_init) @@ -1867,10 +3736,10 @@ def test_set_backend_service_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_backend_service_unary(request) + response = client.set_ssl_certificates(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1895,8 +3764,8 @@ def test_set_backend_service_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_backend_service_unary_rest_required_fields( - request_type=compute.SetBackendServiceTargetSslProxyRequest, +def test_set_ssl_certificates_rest_required_fields( + request_type=compute.SetSslCertificatesTargetSslProxyRequest, ): transport_class = transports.TargetSslProxiesRestTransport @@ -1914,7 +3783,7 @@ def test_set_backend_service_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_backend_service._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1924,7 +3793,7 @@ def test_set_backend_service_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_backend_service._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1965,25 +3834,25 @@ def test_set_backend_service_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_backend_service_unary(request) + response = client.set_ssl_certificates(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_backend_service_unary_rest_unset_required_fields(): +def test_set_ssl_certificates_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_backend_service._get_unset_required_fields({}) + unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "targetSslProxiesSetBackendServiceRequestResource", + "targetSslProxiesSetSslCertificatesRequestResource", "targetSslProxy", ) ) @@ -1991,7 +3860,7 @@ def test_set_backend_service_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_backend_service_unary_rest_interceptors(null_interceptor): +def test_set_ssl_certificates_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2004,9 +3873,9 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "post_set_backend_service" + transports.TargetSslProxiesRestInterceptor, "post_set_ssl_certificates" ) as post, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "pre_set_backend_service" + transports.TargetSslProxiesRestInterceptor, "pre_set_ssl_certificates" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2023,7 +3892,7 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetBackendServiceTargetSslProxyRequest() + request = compute.SetSslCertificatesTargetSslProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2031,7 +3900,7 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_backend_service_unary( + client.set_ssl_certificates( request, metadata=[ ("key", "val"), @@ -2043,8 +3912,9 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_backend_service_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetBackendServiceTargetSslProxyRequest +def test_set_ssl_certificates_rest_bad_request( + transport: str = "rest", + request_type=compute.SetSslCertificatesTargetSslProxyRequest, ): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2053,8 +3923,8 @@ def test_set_backend_service_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} - request_init["target_ssl_proxies_set_backend_service_request_resource"] = { - "service": "service_value" + request_init["target_ssl_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] } request = request_type(request_init) @@ -2067,10 +3937,10 @@ def test_set_backend_service_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_backend_service_unary(request) + client.set_ssl_certificates(request) -def test_set_backend_service_unary_rest_flattened(): +def test_set_ssl_certificates_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2088,8 +3958,8 @@ def test_set_backend_service_unary_rest_flattened(): mock_args = dict( project="project_value", target_ssl_proxy="target_ssl_proxy_value", - target_ssl_proxies_set_backend_service_request_resource=compute.TargetSslProxiesSetBackendServiceRequest( - service="service_value" + target_ssl_proxies_set_ssl_certificates_request_resource=compute.TargetSslProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) mock_args.update(sample_request) @@ -2102,20 +3972,20 @@ def test_set_backend_service_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_backend_service_unary(**mock_args) + client.set_ssl_certificates(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setBackendService" + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setSslCertificates" % client.transport._host, args[1], ) -def test_set_backend_service_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_certificates_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2124,17 +3994,17 @@ def test_set_backend_service_unary_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_backend_service_unary( - compute.SetBackendServiceTargetSslProxyRequest(), + client.set_ssl_certificates( + compute.SetSslCertificatesTargetSslProxyRequest(), project="project_value", target_ssl_proxy="target_ssl_proxy_value", - target_ssl_proxies_set_backend_service_request_resource=compute.TargetSslProxiesSetBackendServiceRequest( - service="service_value" + target_ssl_proxies_set_ssl_certificates_request_resource=compute.TargetSslProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) -def test_set_backend_service_unary_rest_error(): +def test_set_ssl_certificates_rest_error(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2143,11 +4013,11 @@ def test_set_backend_service_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetProxyHeaderTargetSslProxyRequest, + compute.SetSslCertificatesTargetSslProxyRequest, dict, ], ) -def test_set_proxy_header_unary_rest(request_type): +def test_set_ssl_certificates_unary_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2155,8 +4025,8 @@ def test_set_proxy_header_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} - request_init["target_ssl_proxies_set_proxy_header_request_resource"] = { - "proxy_header": "proxy_header_value" + request_init["target_ssl_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] } request = request_type(request_init) @@ -2194,36 +4064,14 @@ def test_set_proxy_header_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_proxy_header_unary(request) + response = client.set_ssl_certificates_unary(request) # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_set_proxy_header_unary_rest_required_fields( - request_type=compute.SetProxyHeaderTargetSslProxyRequest, +def test_set_ssl_certificates_unary_rest_required_fields( + request_type=compute.SetSslCertificatesTargetSslProxyRequest, ): transport_class = transports.TargetSslProxiesRestTransport @@ -2241,7 +4089,7 @@ def test_set_proxy_header_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_proxy_header._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2251,7 +4099,7 @@ def test_set_proxy_header_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_proxy_header._get_unset_required_fields(jsonified_request) + ).set_ssl_certificates._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2292,25 +4140,25 @@ def test_set_proxy_header_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_proxy_header_unary(request) + response = client.set_ssl_certificates_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_proxy_header_unary_rest_unset_required_fields(): +def test_set_ssl_certificates_unary_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_proxy_header._get_unset_required_fields({}) + unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "targetSslProxiesSetProxyHeaderRequestResource", + "targetSslProxiesSetSslCertificatesRequestResource", "targetSslProxy", ) ) @@ -2318,7 +4166,7 @@ def test_set_proxy_header_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_proxy_header_unary_rest_interceptors(null_interceptor): +def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2331,9 +4179,9 @@ def test_set_proxy_header_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "post_set_proxy_header" + transports.TargetSslProxiesRestInterceptor, "post_set_ssl_certificates" ) as post, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "pre_set_proxy_header" + transports.TargetSslProxiesRestInterceptor, "pre_set_ssl_certificates" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2350,7 +4198,7 @@ def test_set_proxy_header_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetProxyHeaderTargetSslProxyRequest() + request = compute.SetSslCertificatesTargetSslProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2358,7 +4206,7 @@ def test_set_proxy_header_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_proxy_header_unary( + client.set_ssl_certificates_unary( request, metadata=[ ("key", "val"), @@ -2370,8 +4218,9 @@ def test_set_proxy_header_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_proxy_header_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetProxyHeaderTargetSslProxyRequest +def test_set_ssl_certificates_unary_rest_bad_request( + transport: str = "rest", + request_type=compute.SetSslCertificatesTargetSslProxyRequest, ): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2380,8 +4229,8 @@ def test_set_proxy_header_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} - request_init["target_ssl_proxies_set_proxy_header_request_resource"] = { - "proxy_header": "proxy_header_value" + request_init["target_ssl_proxies_set_ssl_certificates_request_resource"] = { + "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] } request = request_type(request_init) @@ -2394,10 +4243,10 @@ def test_set_proxy_header_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_proxy_header_unary(request) + client.set_ssl_certificates_unary(request) -def test_set_proxy_header_unary_rest_flattened(): +def test_set_ssl_certificates_unary_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2415,8 +4264,8 @@ def test_set_proxy_header_unary_rest_flattened(): mock_args = dict( project="project_value", target_ssl_proxy="target_ssl_proxy_value", - target_ssl_proxies_set_proxy_header_request_resource=compute.TargetSslProxiesSetProxyHeaderRequest( - proxy_header="proxy_header_value" + target_ssl_proxies_set_ssl_certificates_request_resource=compute.TargetSslProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) mock_args.update(sample_request) @@ -2429,20 +4278,20 @@ def test_set_proxy_header_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_proxy_header_unary(**mock_args) + client.set_ssl_certificates_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setProxyHeader" + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setSslCertificates" % client.transport._host, args[1], ) -def test_set_proxy_header_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2451,17 +4300,17 @@ def test_set_proxy_header_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_proxy_header_unary( - compute.SetProxyHeaderTargetSslProxyRequest(), + client.set_ssl_certificates_unary( + compute.SetSslCertificatesTargetSslProxyRequest(), project="project_value", target_ssl_proxy="target_ssl_proxy_value", - target_ssl_proxies_set_proxy_header_request_resource=compute.TargetSslProxiesSetProxyHeaderRequest( - proxy_header="proxy_header_value" + target_ssl_proxies_set_ssl_certificates_request_resource=compute.TargetSslProxiesSetSslCertificatesRequest( + ssl_certificates=["ssl_certificates_value"] ), ) -def test_set_proxy_header_unary_rest_error(): +def test_set_ssl_certificates_unary_rest_error(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2470,11 +4319,11 @@ def test_set_proxy_header_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.SetSslCertificatesTargetSslProxyRequest, + compute.SetSslPolicyTargetSslProxyRequest, dict, ], ) -def test_set_ssl_certificates_unary_rest(request_type): +def test_set_ssl_policy_rest(request_type): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2482,9 +4331,7 @@ def test_set_ssl_certificates_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} - request_init["target_ssl_proxies_set_ssl_certificates_request_resource"] = { - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] - } + request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} request = request_type(request_init) # Mock the http request call within the method and fake a response. @@ -2521,10 +4368,10 @@ def test_set_ssl_certificates_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_certificates_unary(request) + response = client.set_ssl_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2549,8 +4396,8 @@ def test_set_ssl_certificates_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_ssl_certificates_unary_rest_required_fields( - request_type=compute.SetSslCertificatesTargetSslProxyRequest, +def test_set_ssl_policy_rest_required_fields( + request_type=compute.SetSslPolicyTargetSslProxyRequest, ): transport_class = transports.TargetSslProxiesRestTransport @@ -2568,7 +4415,7 @@ def test_set_ssl_certificates_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + ).set_ssl_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -2578,7 +4425,7 @@ def test_set_ssl_certificates_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_ssl_certificates._get_unset_required_fields(jsonified_request) + ).set_ssl_policy._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2619,25 +4466,25 @@ def test_set_ssl_certificates_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_ssl_certificates_unary(request) + response = client.set_ssl_policy(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_ssl_certificates_unary_rest_unset_required_fields(): +def test_set_ssl_policy_rest_unset_required_fields(): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_ssl_certificates._get_unset_required_fields({}) + unset_fields = transport.set_ssl_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "targetSslProxiesSetSslCertificatesRequestResource", + "sslPolicyReferenceResource", "targetSslProxy", ) ) @@ -2645,7 +4492,7 @@ def test_set_ssl_certificates_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): +def test_set_ssl_policy_rest_interceptors(null_interceptor): transport = transports.TargetSslProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2658,9 +4505,9 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "post_set_ssl_certificates" + transports.TargetSslProxiesRestInterceptor, "post_set_ssl_policy" ) as post, mock.patch.object( - transports.TargetSslProxiesRestInterceptor, "pre_set_ssl_certificates" + transports.TargetSslProxiesRestInterceptor, "pre_set_ssl_policy" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2677,7 +4524,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetSslCertificatesTargetSslProxyRequest() + request = compute.SetSslPolicyTargetSslProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2685,7 +4532,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_ssl_certificates_unary( + client.set_ssl_policy( request, metadata=[ ("key", "val"), @@ -2697,9 +4544,8 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_ssl_certificates_unary_rest_bad_request( - transport: str = "rest", - request_type=compute.SetSslCertificatesTargetSslProxyRequest, +def test_set_ssl_policy_rest_bad_request( + transport: str = "rest", request_type=compute.SetSslPolicyTargetSslProxyRequest ): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2708,9 +4554,7 @@ def test_set_ssl_certificates_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_ssl_proxy": "sample2"} - request_init["target_ssl_proxies_set_ssl_certificates_request_resource"] = { - "ssl_certificates": ["ssl_certificates_value_1", "ssl_certificates_value_2"] - } + request_init["ssl_policy_reference_resource"] = {"ssl_policy": "ssl_policy_value"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2722,10 +4566,10 @@ def test_set_ssl_certificates_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_ssl_certificates_unary(request) + client.set_ssl_policy(request) -def test_set_ssl_certificates_unary_rest_flattened(): +def test_set_ssl_policy_rest_flattened(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2743,8 +4587,8 @@ def test_set_ssl_certificates_unary_rest_flattened(): mock_args = dict( project="project_value", target_ssl_proxy="target_ssl_proxy_value", - target_ssl_proxies_set_ssl_certificates_request_resource=compute.TargetSslProxiesSetSslCertificatesRequest( - ssl_certificates=["ssl_certificates_value"] + ssl_policy_reference_resource=compute.SslPolicyReference( + ssl_policy="ssl_policy_value" ), ) mock_args.update(sample_request) @@ -2757,20 +4601,20 @@ def test_set_ssl_certificates_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_ssl_certificates_unary(**mock_args) + client.set_ssl_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setSslCertificates" + "%s/compute/v1/projects/{project}/global/targetSslProxies/{target_ssl_proxy}/setSslPolicy" % client.transport._host, args[1], ) -def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest"): +def test_set_ssl_policy_rest_flattened_error(transport: str = "rest"): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2779,17 +4623,17 @@ def test_set_ssl_certificates_unary_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_ssl_certificates_unary( - compute.SetSslCertificatesTargetSslProxyRequest(), + client.set_ssl_policy( + compute.SetSslPolicyTargetSslProxyRequest(), project="project_value", target_ssl_proxy="target_ssl_proxy_value", - target_ssl_proxies_set_ssl_certificates_request_resource=compute.TargetSslProxiesSetSslCertificatesRequest( - ssl_certificates=["ssl_certificates_value"] + ssl_policy_reference_resource=compute.SslPolicyReference( + ssl_policy="ssl_policy_value" ), ) -def test_set_ssl_certificates_unary_rest_error(): +def test_set_ssl_policy_rest_error(): client = TargetSslProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2851,28 +4695,6 @@ def test_set_ssl_policy_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_ssl_policy_unary_rest_required_fields( @@ -3193,6 +5015,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetSslProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_ssl_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3231,6 +5066,14 @@ def test_target_ssl_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_ssl_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_tcp_proxies.py b/tests/unit/gapic/compute_v1/test_target_tcp_proxies.py index 6cfbb7bf0..263ce0f6f 100644 --- a/tests/unit/gapic/compute_v1/test_target_tcp_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_tcp_proxies.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -545,7 +547,7 @@ def test_target_tcp_proxies_client_client_options_credentials_file( dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -589,10 +591,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -617,9 +619,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetTcpProxyRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteTargetTcpProxyRequest): transport_class = transports.TargetTcpProxiesRestTransport request_init = {} @@ -686,14 +686,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -711,7 +711,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -751,7 +751,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -763,7 +763,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteTargetTcpProxyRequest ): client = TargetTcpProxiesClient( @@ -784,10 +784,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -816,7 +816,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -829,7 +829,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -838,14 +838,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteTargetTcpProxyRequest(), project="project_value", target_tcp_proxy="target_tcp_proxy_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -854,11 +854,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetTcpProxyRequest, + compute.DeleteTargetTcpProxyRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -871,40 +871,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetTcpProxy( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - proxy_bind=True, - proxy_header="proxy_header_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", - service="service_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetTcpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetTcpProxy) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.proxy_bind is True - assert response.proxy_header == "proxy_header_value" - assert response.self_link == "self_link_value" - assert response.service == "service_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetTargetTcpProxyRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetTcpProxyRequest, +): transport_class = transports.TargetTcpProxiesRestTransport request_init = {} @@ -921,7 +927,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetTcpProxyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -931,7 +937,9 @@ def test_get_rest_required_fields(request_type=compute.GetTargetTcpProxyRequest) unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -947,7 +955,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetTcpProxyRequest) request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetTcpProxy() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -958,32 +966,32 @@ def test_get_rest_required_fields(request_type=compute.GetTargetTcpProxyRequest) # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetTcpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -994,7 +1002,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1007,9 +1015,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "post_get" + transports.TargetTcpProxiesRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "pre_get" + transports.TargetTcpProxiesRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1024,19 +1032,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetTcpProxy.to_json( - compute.TargetTcpProxy() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetTcpProxyRequest() + request = compute.DeleteTargetTcpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetTcpProxy + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1048,8 +1054,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetTcpProxyRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetTcpProxyRequest ): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1069,10 +1075,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1081,7 +1087,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetTcpProxy() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "target_tcp_proxy": "sample2"} @@ -1096,12 +1102,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetTcpProxy.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1114,7 +1120,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1123,14 +1129,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetTcpProxyRequest(), + client.delete_unary( + compute.DeleteTargetTcpProxyRequest(), project="project_value", target_tcp_proxy="target_tcp_proxy_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1139,100 +1145,62 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertTargetTcpProxyRequest, + compute.GetTargetTcpProxyRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_tcp_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "proxy_header": "proxy_header_value", - "self_link": "self_link_value", - "service": "service_value", - } + request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.TargetTcpProxy( creation_timestamp="creation_timestamp_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", + proxy_bind=True, + proxy_header="proxy_header_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", + service="service_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetTcpProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.TargetTcpProxy) assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.proxy_bind is True + assert response.proxy_header == "proxy_header_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" + assert response.service == "service_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertTargetTcpProxyRequest, -): +def test_get_rest_required_fields(request_type=compute.GetTargetTcpProxyRequest): transport_class = transports.TargetTcpProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_tcp_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1244,23 +1212,24 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetTcpProxy"] = "target_tcp_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetTcpProxy" in jsonified_request + assert jsonified_request["targetTcpProxy"] == "target_tcp_proxy_value" client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1269,7 +1238,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetTcpProxy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1280,44 +1249,43 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetTcpProxy.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "targetTcpProxyResource", + "targetTcpProxy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1330,9 +1298,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "post_insert" + transports.TargetTcpProxiesRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "pre_insert" + transports.TargetTcpProxiesRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1347,17 +1315,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetTcpProxy.to_json( + compute.TargetTcpProxy() + ) - request = compute.InsertTargetTcpProxyRequest() + request = compute.GetTargetTcpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetTcpProxy - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1369,8 +1339,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertTargetTcpProxyRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetTcpProxyRequest ): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1378,18 +1348,7 @@ def test_insert_unary_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["target_tcp_proxy_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "name": "name_value", - "proxy_bind": True, - "proxy_header": "proxy_header_value", - "self_link": "self_link_value", - "service": "service_value", - } + request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1401,10 +1360,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.get(request) -def test_insert_unary_rest_flattened(): +def test_get_rest_flattened(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1413,16 +1372,1323 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetTcpProxy() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_tcp_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", - target_tcp_proxy_resource=compute.TargetTcpProxy( - creation_timestamp="creation_timestamp_value" + target_tcp_proxy="target_tcp_proxy_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetTcpProxy.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetTcpProxies/{target_tcp_proxy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetTargetTcpProxyRequest(), + project="project_value", + target_tcp_proxy="target_tcp_proxy_value", + ) + + +def test_get_rest_error(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetTcpProxyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_tcp_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertTargetTcpProxyRequest): + transport_class = transports.TargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetTcpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetTcpProxiesRestInterceptor(), + ) + client = TargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetTcpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetTcpProxyRequest +): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_tcp_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_tcp_proxy_resource=compute.TargetTcpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetTcpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertTargetTcpProxyRequest(), + project="project_value", + target_tcp_proxy_resource=compute.TargetTcpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertTargetTcpProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_tcp_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertTargetTcpProxyRequest, +): + transport_class = transports.TargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetTcpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetTcpProxiesRestInterceptor(), + ) + client = TargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertTargetTcpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetTcpProxyRequest +): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["target_tcp_proxy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "name": "name_value", + "proxy_bind": True, + "proxy_header": "proxy_header_value", + "self_link": "self_link_value", + "service": "service_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_tcp_proxy_resource=compute.TargetTcpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetTcpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertTargetTcpProxyRequest(), + project="project_value", + target_tcp_proxy_resource=compute.TargetTcpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListTargetTcpProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetTcpProxyList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetTcpProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListTargetTcpProxiesRequest): + transport_class = transports.TargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.TargetTcpProxyList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetTcpProxyList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetTcpProxiesRestInterceptor(), + ) + client = TargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.TargetTcpProxyList.to_json( + compute.TargetTcpProxyList() + ) + + request = compute.ListTargetTcpProxiesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetTcpProxyList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListTargetTcpProxiesRequest +): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetTcpProxyList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetTcpProxyList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/targetTcpProxies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListTargetTcpProxiesRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.TargetTcpProxyList( + items=[ + compute.TargetTcpProxy(), + compute.TargetTcpProxy(), + compute.TargetTcpProxy(), + ], + next_page_token="abc", + ), + compute.TargetTcpProxyList( + items=[], + next_page_token="def", + ), + compute.TargetTcpProxyList( + items=[ + compute.TargetTcpProxy(), + ], + next_page_token="ghi", + ), + compute.TargetTcpProxyList( + items=[ + compute.TargetTcpProxy(), + compute.TargetTcpProxy(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.TargetTcpProxyList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.TargetTcpProxy) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetBackendServiceTargetTcpProxyRequest, + dict, + ], +) +def test_set_backend_service_rest(request_type): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} + request_init["target_tcp_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.set_backend_service(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_set_backend_service_rest_required_fields( + request_type=compute.SetBackendServiceTargetTcpProxyRequest, +): + transport_class = transports.TargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["target_tcp_proxy"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_backend_service._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["targetTcpProxy"] = "target_tcp_proxy_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).set_backend_service._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "targetTcpProxy" in jsonified_request + assert jsonified_request["targetTcpProxy"] == "target_tcp_proxy_value" + + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.set_backend_service(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_set_backend_service_rest_unset_required_fields(): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.set_backend_service._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "targetTcpProxiesSetBackendServiceRequestResource", + "targetTcpProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_backend_service_rest_interceptors(null_interceptor): + transport = transports.TargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetTcpProxiesRestInterceptor(), + ) + client = TargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "post_set_backend_service" + ) as post, mock.patch.object( + transports.TargetTcpProxiesRestInterceptor, "pre_set_backend_service" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.SetBackendServiceTargetTcpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.set_backend_service( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_backend_service_rest_bad_request( + transport: str = "rest", request_type=compute.SetBackendServiceTargetTcpProxyRequest +): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} + request_init["target_tcp_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_backend_service(request) + + +def test_set_backend_service_rest_flattened(): + client = TargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "target_tcp_proxy": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + target_tcp_proxy="target_tcp_proxy_value", + target_tcp_proxies_set_backend_service_request_resource=compute.TargetTcpProxiesSetBackendServiceRequest( + service="service_value" ), ) mock_args.update(sample_request) @@ -1435,20 +2701,20 @@ def test_insert_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.set_backend_service(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetTcpProxies" + "%s/compute/v1/projects/{project}/global/targetTcpProxies/{target_tcp_proxy}/setBackendService" % client.transport._host, args[1], ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_set_backend_service_rest_flattened_error(transport: str = "rest"): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1457,16 +2723,17 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertTargetTcpProxyRequest(), + client.set_backend_service( + compute.SetBackendServiceTargetTcpProxyRequest(), project="project_value", - target_tcp_proxy_resource=compute.TargetTcpProxy( - creation_timestamp="creation_timestamp_value" + target_tcp_proxy="target_tcp_proxy_value", + target_tcp_proxies_set_backend_service_request_resource=compute.TargetTcpProxiesSetBackendServiceRequest( + service="service_value" ), ) -def test_insert_unary_rest_error(): +def test_set_backend_service_rest_error(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1475,51 +2742,71 @@ def test_insert_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.ListTargetTcpProxiesRequest, + compute.SetBackendServiceTargetTcpProxyRequest, dict, ], ) -def test_list_rest(request_type): +def test_set_backend_service_unary_rest(request_type): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} + request_init["target_tcp_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetTcpProxyList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetTcpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_backend_service_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_list_rest_required_fields(request_type=compute.ListTargetTcpProxiesRequest): +def test_set_backend_service_unary_rest_required_fields( + request_type=compute.SetBackendServiceTargetTcpProxyRequest, +): transport_class = transports.TargetTcpProxiesRestTransport request_init = {} request_init["project"] = "" + request_init["target_tcp_proxy"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1531,31 +2818,26 @@ def test_list_rest_required_fields(request_type=compute.ListTargetTcpProxiesRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_backend_service._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["targetTcpProxy"] = "target_tcp_proxy_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_backend_service._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "targetTcpProxy" in jsonified_request + assert jsonified_request["targetTcpProxy"] == "target_tcp_proxy_value" client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1564,7 +2846,7 @@ def test_list_rest_required_fields(request_type=compute.ListTargetTcpProxiesRequ request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetTcpProxyList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1575,46 +2857,45 @@ def test_list_rest_required_fields(request_type=compute.ListTargetTcpProxiesRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetTcpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_backend_service_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_backend_service_unary_rest_unset_required_fields(): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_backend_service._get_unset_required_fields({}) assert set(unset_fields) == ( - set( + set(("requestId",)) + & set( ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", + "project", + "targetTcpProxiesSetBackendServiceRequestResource", + "targetTcpProxy", ) ) - & set(("project",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_backend_service_unary_rest_interceptors(null_interceptor): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1627,9 +2908,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "post_list" + transports.TargetTcpProxiesRestInterceptor, "post_set_backend_service" ) as post, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "pre_list" + transports.TargetTcpProxiesRestInterceptor, "pre_set_backend_service" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1644,19 +2925,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetTcpProxyList.to_json( - compute.TargetTcpProxyList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListTargetTcpProxiesRequest() + request = compute.SetBackendServiceTargetTcpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetTcpProxyList + post.return_value = compute.Operation - client.list( + client.set_backend_service_unary( request, metadata=[ ("key", "val"), @@ -1668,8 +2947,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListTargetTcpProxiesRequest +def test_set_backend_service_unary_rest_bad_request( + transport: str = "rest", request_type=compute.SetBackendServiceTargetTcpProxyRequest ): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1677,7 +2956,10 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} + request_init["target_tcp_proxies_set_backend_service_request_resource"] = { + "service": "service_value" + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1689,10 +2971,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_backend_service_unary(request) -def test_list_rest_flattened(): +def test_set_backend_service_unary_rest_flattened(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1701,39 +2983,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetTcpProxyList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "target_tcp_proxy": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + target_tcp_proxy="target_tcp_proxy_value", + target_tcp_proxies_set_backend_service_request_resource=compute.TargetTcpProxiesSetBackendServiceRequest( + service="service_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetTcpProxyList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_backend_service_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetTcpProxies" + "%s/compute/v1/projects/{project}/global/targetTcpProxies/{target_tcp_proxy}/setBackendService" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_backend_service_unary_rest_flattened_error(transport: str = "rest"): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1742,81 +3028,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListTargetTcpProxiesRequest(), + client.set_backend_service_unary( + compute.SetBackendServiceTargetTcpProxyRequest(), project="project_value", + target_tcp_proxy="target_tcp_proxy_value", + target_tcp_proxies_set_backend_service_request_resource=compute.TargetTcpProxiesSetBackendServiceRequest( + service="service_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_backend_service_unary_rest_error(): client = TargetTcpProxiesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.TargetTcpProxyList( - items=[ - compute.TargetTcpProxy(), - compute.TargetTcpProxy(), - compute.TargetTcpProxy(), - ], - next_page_token="abc", - ), - compute.TargetTcpProxyList( - items=[], - next_page_token="def", - ), - compute.TargetTcpProxyList( - items=[ - compute.TargetTcpProxy(), - ], - next_page_token="ghi", - ), - compute.TargetTcpProxyList( - items=[ - compute.TargetTcpProxy(), - compute.TargetTcpProxy(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.TargetTcpProxyList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.TargetTcpProxy) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.SetBackendServiceTargetTcpProxyRequest, + compute.SetProxyHeaderTargetTcpProxyRequest, dict, ], ) -def test_set_backend_service_unary_rest(request_type): +def test_set_proxy_header_rest(request_type): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1824,8 +3059,8 @@ def test_set_backend_service_unary_rest(request_type): # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} - request_init["target_tcp_proxies_set_backend_service_request_resource"] = { - "service": "service_value" + request_init["target_tcp_proxies_set_proxy_header_request_resource"] = { + "proxy_header": "proxy_header_value" } request = request_type(request_init) @@ -1863,10 +3098,10 @@ def test_set_backend_service_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_backend_service_unary(request) + response = client.set_proxy_header(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -1891,8 +3126,8 @@ def test_set_backend_service_unary_rest(request_type): assert response.zone == "zone_value" -def test_set_backend_service_unary_rest_required_fields( - request_type=compute.SetBackendServiceTargetTcpProxyRequest, +def test_set_proxy_header_rest_required_fields( + request_type=compute.SetProxyHeaderTargetTcpProxyRequest, ): transport_class = transports.TargetTcpProxiesRestTransport @@ -1910,7 +3145,7 @@ def test_set_backend_service_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_backend_service._get_unset_required_fields(jsonified_request) + ).set_proxy_header._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1920,7 +3155,7 @@ def test_set_backend_service_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_backend_service._get_unset_required_fields(jsonified_request) + ).set_proxy_header._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -1961,25 +3196,25 @@ def test_set_backend_service_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_backend_service_unary(request) + response = client.set_proxy_header(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_backend_service_unary_rest_unset_required_fields(): +def test_set_proxy_header_rest_unset_required_fields(): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_backend_service._get_unset_required_fields({}) + unset_fields = transport.set_proxy_header._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( "project", - "targetTcpProxiesSetBackendServiceRequestResource", + "targetTcpProxiesSetProxyHeaderRequestResource", "targetTcpProxy", ) ) @@ -1987,7 +3222,7 @@ def test_set_backend_service_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_backend_service_unary_rest_interceptors(null_interceptor): +def test_set_proxy_header_rest_interceptors(null_interceptor): transport = transports.TargetTcpProxiesRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2000,9 +3235,9 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "post_set_backend_service" + transports.TargetTcpProxiesRestInterceptor, "post_set_proxy_header" ) as post, mock.patch.object( - transports.TargetTcpProxiesRestInterceptor, "pre_set_backend_service" + transports.TargetTcpProxiesRestInterceptor, "pre_set_proxy_header" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2019,7 +3254,7 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.SetBackendServiceTargetTcpProxyRequest() + request = compute.SetProxyHeaderTargetTcpProxyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2027,7 +3262,7 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.set_backend_service_unary( + client.set_proxy_header( request, metadata=[ ("key", "val"), @@ -2039,8 +3274,8 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_backend_service_unary_rest_bad_request( - transport: str = "rest", request_type=compute.SetBackendServiceTargetTcpProxyRequest +def test_set_proxy_header_rest_bad_request( + transport: str = "rest", request_type=compute.SetProxyHeaderTargetTcpProxyRequest ): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2049,8 +3284,8 @@ def test_set_backend_service_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "target_tcp_proxy": "sample2"} - request_init["target_tcp_proxies_set_backend_service_request_resource"] = { - "service": "service_value" + request_init["target_tcp_proxies_set_proxy_header_request_resource"] = { + "proxy_header": "proxy_header_value" } request = request_type(request_init) @@ -2063,10 +3298,10 @@ def test_set_backend_service_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_backend_service_unary(request) + client.set_proxy_header(request) -def test_set_backend_service_unary_rest_flattened(): +def test_set_proxy_header_rest_flattened(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2084,8 +3319,8 @@ def test_set_backend_service_unary_rest_flattened(): mock_args = dict( project="project_value", target_tcp_proxy="target_tcp_proxy_value", - target_tcp_proxies_set_backend_service_request_resource=compute.TargetTcpProxiesSetBackendServiceRequest( - service="service_value" + target_tcp_proxies_set_proxy_header_request_resource=compute.TargetTcpProxiesSetProxyHeaderRequest( + proxy_header="proxy_header_value" ), ) mock_args.update(sample_request) @@ -2098,20 +3333,20 @@ def test_set_backend_service_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_backend_service_unary(**mock_args) + client.set_proxy_header(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/targetTcpProxies/{target_tcp_proxy}/setBackendService" + "%s/compute/v1/projects/{project}/global/targetTcpProxies/{target_tcp_proxy}/setProxyHeader" % client.transport._host, args[1], ) -def test_set_backend_service_unary_rest_flattened_error(transport: str = "rest"): +def test_set_proxy_header_rest_flattened_error(transport: str = "rest"): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2120,17 +3355,17 @@ def test_set_backend_service_unary_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_backend_service_unary( - compute.SetBackendServiceTargetTcpProxyRequest(), + client.set_proxy_header( + compute.SetProxyHeaderTargetTcpProxyRequest(), project="project_value", target_tcp_proxy="target_tcp_proxy_value", - target_tcp_proxies_set_backend_service_request_resource=compute.TargetTcpProxiesSetBackendServiceRequest( - service="service_value" + target_tcp_proxies_set_proxy_header_request_resource=compute.TargetTcpProxiesSetProxyHeaderRequest( + proxy_header="proxy_header_value" ), ) -def test_set_backend_service_unary_rest_error(): +def test_set_proxy_header_rest_error(): client = TargetTcpProxiesClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -2194,28 +3429,6 @@ def test_set_proxy_header_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_proxy_header_unary_rest_required_fields( @@ -2538,6 +3751,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetTcpProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_tcp_proxies_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2574,6 +3800,14 @@ def test_target_tcp_proxies_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_tcp_proxies_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_target_vpn_gateways.py b/tests/unit/gapic/compute_v1/test_target_vpn_gateways.py index 5f3c7d10f..02e2ecd41 100644 --- a/tests/unit/gapic/compute_v1/test_target_vpn_gateways.py +++ b/tests/unit/gapic/compute_v1/test_target_vpn_gateways.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -904,7 +906,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -952,10 +954,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -980,9 +982,627 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteTargetVpnGatewayRequest, -): +def test_delete_rest_required_fields( + request_type=compute.DeleteTargetVpnGatewayRequest, +): + transport_class = transports.TargetVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_vpn_gateway"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetVpnGateway"] = "target_vpn_gateway_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetVpnGateway" in jsonified_request + assert jsonified_request["targetVpnGateway"] == "target_vpn_gateway_value" + + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_rest_unset_required_fields(): + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetVpnGateway", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetVpnGatewaysRestInterceptor(), + ) + client = TargetVpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetVpnGatewaysRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.TargetVpnGatewaysRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteTargetVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetVpnGatewayRequest +): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_vpn_gateway": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete(request) + + +def test_delete_rest_flattened(): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_vpn_gateway": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_vpn_gateway="target_vpn_gateway_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetVpnGateways/{target_vpn_gateway}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteTargetVpnGatewayRequest(), + project="project_value", + region="region_value", + target_vpn_gateway="target_vpn_gateway_value", + ) + + +def test_delete_rest_error(): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteTargetVpnGatewayRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_vpn_gateway": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteTargetVpnGatewayRequest, +): + transport_class = transports.TargetVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_vpn_gateway"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["targetVpnGateway"] = "target_vpn_gateway_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "targetVpnGateway" in jsonified_request + assert jsonified_request["targetVpnGateway"] == "target_vpn_gateway_value" + + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetVpnGateway", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.TargetVpnGatewaysRestInterceptor(), + ) + client = TargetVpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.TargetVpnGatewaysRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.TargetVpnGatewaysRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteTargetVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteTargetVpnGatewayRequest +): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_vpn_gateway": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_vpn_gateway": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + target_vpn_gateway="target_vpn_gateway_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/targetVpnGateways/{target_vpn_gateway}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteTargetVpnGatewayRequest(), + project="project_value", + region="region_value", + target_vpn_gateway="target_vpn_gateway_value", + ) + + +def test_delete_unary_rest_error(): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetTargetVpnGatewayRequest, + dict, + ], +) +def test_get_rest(request_type): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_vpn_gateway": "sample3", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.TargetVpnGateway( + creation_timestamp="creation_timestamp_value", + description="description_value", + forwarding_rules=["forwarding_rules_value"], + id=205, + kind="kind_value", + name="name_value", + network="network_value", + region="region_value", + self_link="self_link_value", + status="status_value", + tunnels=["tunnels_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.TargetVpnGateway.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.TargetVpnGateway) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.forwarding_rules == ["forwarding_rules_value"] + assert response.id == 205 + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.status == "status_value" + assert response.tunnels == ["tunnels_value"] + + +def test_get_rest_required_fields(request_type=compute.GetTargetVpnGatewayRequest): transport_class = transports.TargetVpnGatewaysRestTransport request_init = {} @@ -1000,7 +1620,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1011,9 +1631,7 @@ def test_delete_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1031,7 +1649,7 @@ def test_delete_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetVpnGateway() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1042,32 +1660,32 @@ def test_delete_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetVpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.TargetVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", @@ -1079,7 +1697,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.TargetVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1092,9 +1710,9 @@ def test_delete_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetVpnGatewaysRestInterceptor, "post_delete" + transports.TargetVpnGatewaysRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.TargetVpnGatewaysRestInterceptor, "pre_delete" + transports.TargetVpnGatewaysRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1109,17 +1727,19 @@ def test_delete_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.TargetVpnGateway.to_json( + compute.TargetVpnGateway() + ) - request = compute.DeleteTargetVpnGatewayRequest() + request = compute.GetTargetVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.TargetVpnGateway - client.delete_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1131,8 +1751,8 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( - transport: str = "rest", request_type=compute.DeleteTargetVpnGatewayRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetTargetVpnGatewayRequest ): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1156,10 +1776,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1168,7 +1788,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.TargetVpnGateway() # get arguments that satisfy an http rule for this method sample_request = { @@ -1188,12 +1808,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.TargetVpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1206,7 +1826,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1215,15 +1835,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteTargetVpnGatewayRequest(), + client.get( + compute.GetTargetVpnGatewayRequest(), project="project_value", region="region_value", target_vpn_gateway="target_vpn_gateway_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1232,71 +1852,103 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetTargetVpnGatewayRequest, + compute.InsertTargetVpnGatewayRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "target_vpn_gateway": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "forwarding_rules": ["forwarding_rules_value_1", "forwarding_rules_value_2"], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + "tunnels": ["tunnels_value_1", "tunnels_value_2"], } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetVpnGateway( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - forwarding_rules=["forwarding_rules_value"], + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", - network="network_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - status="status_value", - tunnels=["tunnels_value"], + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetVpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.TargetVpnGateway) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.forwarding_rules == ["forwarding_rules_value"] + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.network == "network_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.status == "status_value" - assert response.tunnels == ["tunnels_value"] + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetTargetVpnGatewayRequest): +def test_insert_rest_required_fields( + request_type=compute.InsertTargetVpnGatewayRequest, +): transport_class = transports.TargetVpnGatewaysRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["target_vpn_gateway"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1308,18 +1960,19 @@ def test_get_rest_required_fields(request_type=compute.GetTargetVpnGatewayReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["targetVpnGateway"] = "target_vpn_gateway_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1327,8 +1980,6 @@ def test_get_rest_required_fields(request_type=compute.GetTargetVpnGatewayReques assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "targetVpnGateway" in jsonified_request - assert jsonified_request["targetVpnGateway"] == "target_vpn_gateway_value" client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1337,7 +1988,7 @@ def test_get_rest_required_fields(request_type=compute.GetTargetVpnGatewayReques request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.TargetVpnGateway() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1348,44 +1999,45 @@ def test_get_rest_required_fields(request_type=compute.GetTargetVpnGatewayReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetVpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.TargetVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "region", - "targetVpnGateway", + "targetVpnGatewayResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.TargetVpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1398,9 +2050,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.TargetVpnGatewaysRestInterceptor, "post_get" + transports.TargetVpnGatewaysRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.TargetVpnGatewaysRestInterceptor, "pre_get" + transports.TargetVpnGatewaysRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1415,19 +2067,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.TargetVpnGateway.to_json( - compute.TargetVpnGateway() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetTargetVpnGatewayRequest() + request = compute.InsertTargetVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetVpnGateway + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1439,8 +2089,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetTargetVpnGatewayRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertTargetVpnGatewayRequest ): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1448,10 +2098,19 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = { - "project": "sample1", - "region": "sample2", - "target_vpn_gateway": "sample3", + request_init = {"project": "sample1", "region": "sample2"} + request_init["target_vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "forwarding_rules": ["forwarding_rules_value_1", "forwarding_rules_value_2"], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "status": "status_value", + "tunnels": ["tunnels_value_1", "tunnels_value_2"], } request = request_type(request_init) @@ -1464,10 +2123,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1476,45 +2135,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.TargetVpnGateway() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "target_vpn_gateway": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - target_vpn_gateway="target_vpn_gateway_value", + target_vpn_gateway_resource=compute.TargetVpnGateway( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.TargetVpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/targetVpnGateways/{target_vpn_gateway}" + "%s/compute/v1/projects/{project}/regions/{region}/targetVpnGateways" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1523,15 +2180,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetTargetVpnGatewayRequest(), + client.insert( + compute.InsertTargetVpnGatewayRequest(), project="project_value", region="region_value", - target_vpn_gateway="target_vpn_gateway_value", + target_vpn_gateway_resource=compute.TargetVpnGateway( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1605,28 +2264,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields( @@ -2307,6 +2944,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = TargetVpnGatewaysClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_target_vpn_gateways_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2342,6 +2992,14 @@ def test_target_vpn_gateways_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_target_vpn_gateways_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_url_maps.py b/tests/unit/gapic/compute_v1/test_url_maps.py index 4b54a7654..5808c39e5 100644 --- a/tests/unit/gapic/compute_v1/test_url_maps.py +++ b/tests/unit/gapic/compute_v1/test_url_maps.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -861,7 +863,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -905,10 +907,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -933,7 +935,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteUrlMapRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteUrlMapRequest): transport_class = transports.UrlMapsRestTransport request_init = {} @@ -1000,14 +1002,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteUrlMapRequ response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1025,7 +1027,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), @@ -1063,7 +1065,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1075,7 +1077,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteUrlMapRequest ): client = UrlMapsClient( @@ -1096,10 +1098,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1128,7 +1130,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1141,7 +1143,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1150,14 +1152,14 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteUrlMapRequest(), project="project_value", url_map="url_map_value", ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1166,11 +1168,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetUrlMapRequest, + compute.DeleteUrlMapRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1183,40 +1185,44 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMap( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", - default_service="default_service_value", description="description_value", - fingerprint="fingerprint_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMap.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.UrlMap) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.default_service == "default_service_value" - assert response.description == "description_value" - assert response.fingerprint == "fingerprint_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetUrlMapRequest): +def test_delete_unary_rest_required_fields(request_type=compute.DeleteUrlMapRequest): transport_class = transports.UrlMapsRestTransport request_init = {} @@ -1233,7 +1239,7 @@ def test_get_rest_required_fields(request_type=compute.GetUrlMapRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1243,7 +1249,9 @@ def test_get_rest_required_fields(request_type=compute.GetUrlMapRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1259,7 +1267,7 @@ def test_get_rest_required_fields(request_type=compute.GetUrlMapRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.UrlMap() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1270,32 +1278,32 @@ def test_get_rest_required_fields(request_type=compute.GetUrlMapRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMap.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1306,7 +1314,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), @@ -1317,9 +1325,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.UrlMapsRestInterceptor, "post_get" + transports.UrlMapsRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.UrlMapsRestInterceptor, "pre_get" + transports.UrlMapsRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1334,17 +1342,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.UrlMap.to_json(compute.UrlMap()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetUrlMapRequest() + request = compute.DeleteUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMap + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1356,8 +1364,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetUrlMapRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteUrlMapRequest ): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1377,10 +1385,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1389,7 +1397,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMap() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "url_map": "sample2"} @@ -1404,12 +1412,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMap.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1422,7 +1430,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1431,14 +1439,14 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetUrlMapRequest(), + client.delete_unary( + compute.DeleteUrlMapRequest(), project="project_value", url_map="url_map_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1447,256 +1455,62 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertUrlMapRequest, + compute.GetUrlMapRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_rest(request_type): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1"} - request_init["url_map_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "default_route_action": { - "cors_policy": { - "allow_credentials": True, - "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], - "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], - "allow_origin_regexes": [ - "allow_origin_regexes_value_1", - "allow_origin_regexes_value_2", - ], - "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], - "disabled": True, - "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], - "max_age": 722, - }, - "fault_injection_policy": { - "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, - "delay": { - "fixed_delay": {"nanos": 543, "seconds": 751}, - "percentage": 0.10540000000000001, - }, - }, - "max_stream_duration": {}, - "request_mirror_policy": {"backend_service": "backend_service_value"}, - "retry_policy": { - "num_retries": 1197, - "per_try_timeout": {}, - "retry_conditions": [ - "retry_conditions_value_1", - "retry_conditions_value_2", - ], - }, - "timeout": {}, - "url_rewrite": { - "host_rewrite": "host_rewrite_value", - "path_prefix_rewrite": "path_prefix_rewrite_value", - }, - "weighted_backend_services": [ - { - "backend_service": "backend_service_value", - "header_action": { - "request_headers_to_add": [ - { - "header_name": "header_name_value", - "header_value": "header_value_value", - "replace": True, - } - ], - "request_headers_to_remove": [ - "request_headers_to_remove_value_1", - "request_headers_to_remove_value_2", - ], - "response_headers_to_add": {}, - "response_headers_to_remove": [ - "response_headers_to_remove_value_1", - "response_headers_to_remove_value_2", - ], - }, - "weight": 648, - } - ], - }, - "default_service": "default_service_value", - "default_url_redirect": { - "host_redirect": "host_redirect_value", - "https_redirect": True, - "path_redirect": "path_redirect_value", - "prefix_redirect": "prefix_redirect_value", - "redirect_response_code": "redirect_response_code_value", - "strip_query": True, - }, - "description": "description_value", - "fingerprint": "fingerprint_value", - "header_action": {}, - "host_rules": [ - { - "description": "description_value", - "hosts": ["hosts_value_1", "hosts_value_2"], - "path_matcher": "path_matcher_value", - } - ], - "id": 205, - "kind": "kind_value", - "name": "name_value", - "path_matchers": [ - { - "default_route_action": {}, - "default_service": "default_service_value", - "default_url_redirect": {}, - "description": "description_value", - "header_action": {}, - "name": "name_value", - "path_rules": [ - { - "paths": ["paths_value_1", "paths_value_2"], - "route_action": {}, - "service": "service_value", - "url_redirect": {}, - } - ], - "route_rules": [ - { - "description": "description_value", - "header_action": {}, - "match_rules": [ - { - "full_path_match": "full_path_match_value", - "header_matches": [ - { - "exact_match": "exact_match_value", - "header_name": "header_name_value", - "invert_match": True, - "prefix_match": "prefix_match_value", - "present_match": True, - "range_match": { - "range_end": 931, - "range_start": 1178, - }, - "regex_match": "regex_match_value", - "suffix_match": "suffix_match_value", - } - ], - "ignore_case": True, - "metadata_filters": [ - { - "filter_labels": [ - { - "name": "name_value", - "value": "value_value", - } - ], - "filter_match_criteria": "filter_match_criteria_value", - } - ], - "prefix_match": "prefix_match_value", - "query_parameter_matches": [ - { - "exact_match": "exact_match_value", - "name": "name_value", - "present_match": True, - "regex_match": "regex_match_value", - } - ], - "regex_match": "regex_match_value", - } - ], - "priority": 898, - "route_action": {}, - "service": "service_value", - "url_redirect": {}, - } - ], - } - ], - "region": "region_value", - "self_link": "self_link_value", - "tests": [ - { - "description": "description_value", - "expected_output_url": "expected_output_url_value", - "expected_redirect_response_code": 3275, - "headers": [{"name": "name_value", "value": "value_value"}], - "host": "host_value", - "path": "path_value", - "service": "service_value", - } - ], - } + request_init = {"project": "sample1", "url_map": "sample2"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", + return_value = compute.UrlMap( creation_timestamp="creation_timestamp_value", + default_service="default_service_value", description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, + fingerprint="fingerprint_value", id=205, - insert_time="insert_time_value", kind="kind_value", name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, region="region_value", self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.UrlMap.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" + assert isinstance(response, compute.UrlMap) assert response.creation_timestamp == "creation_timestamp_value" + assert response.default_service == "default_service_value" assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 + assert response.fingerprint == "fingerprint_value" assert response.id == 205 - assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 assert response.region == "region_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields(request_type=compute.InsertUrlMapRequest): +def test_get_rest_required_fields(request_type=compute.GetUrlMapRequest): transport_class = transports.UrlMapsRestTransport request_init = {} request_init["project"] = "" + request_init["url_map"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1708,23 +1522,24 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertUrlMapRequ unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" + jsonified_request["urlMap"] = "url_map_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1733,7 +1548,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertUrlMapRequ request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.UrlMap() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1744,44 +1559,43 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertUrlMapRequ # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.UrlMap.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set(()) & set( ( "project", - "urlMapResource", + "urlMap", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), @@ -1792,9 +1606,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.UrlMapsRestInterceptor, "post_insert" + transports.UrlMapsRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.UrlMapsRestInterceptor, "pre_insert" + transports.UrlMapsRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1809,17 +1623,17 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.UrlMap.to_json(compute.UrlMap()) - request = compute.InsertUrlMapRequest() + request = compute.GetUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.UrlMap - client.insert_unary( + client.get( request, metadata=[ ("key", "val"), @@ -1831,14 +1645,107 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertUrlMapRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetUrlMapRequest ): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) + + +def test_get_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UrlMap() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "url_map": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + url_map="url_map_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMap.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps/{url_map}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get( + compute.GetUrlMapRequest(), + project="project_value", + url_map="url_map_value", + ) + + +def test_get_rest_error(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertUrlMapRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + # send a request that will satisfy transcoding request_init = {"project": "sample1"} request_init["url_map_resource"] = { @@ -2012,133 +1919,33 @@ def test_insert_unary_rest_bad_request( } request = request_type(request_init) - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.insert_unary(request) - - -def test_insert_unary_rest_flattened(): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() - - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} - - # get truthy value for each flattened field - mock_args = dict( - project="project_value", - url_map_resource=compute.UrlMap( - creation_timestamp="creation_timestamp_value" - ), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.insert_unary(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/compute/v1/projects/{project}/global/urlMaps" % client.transport._host, - args[1], - ) - - -def test_insert_unary_rest_flattened_error(transport: str = "rest"): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.insert_unary( - compute.InsertUrlMapRequest(), - project="project_value", - url_map_resource=compute.UrlMap( - creation_timestamp="creation_timestamp_value" - ), - ) - - -def test_insert_unary_rest_error(): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - -@pytest.mark.parametrize( - "request_type", - [ - compute.InvalidateCacheUrlMapRequest, - dict, - ], -) -def test_invalidate_cache_unary_rest(request_type): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "url_map": "sample2"} - request_init["cache_invalidation_rule_resource"] = { - "host": "host_value", - "path": "path_value", - } - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, - target_link="target_link_value", - user="user_value", - zone="zone_value", - ) + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) # Wrap the value into a proper Response obj response_value = Response() @@ -2146,10 +1953,10 @@ def test_invalidate_cache_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.invalidate_cache_unary(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2174,14 +1981,11 @@ def test_invalidate_cache_unary_rest(request_type): assert response.zone == "zone_value" -def test_invalidate_cache_unary_rest_required_fields( - request_type=compute.InvalidateCacheUrlMapRequest, -): +def test_insert_rest_required_fields(request_type=compute.InsertUrlMapRequest): transport_class = transports.UrlMapsRestTransport request_init = {} request_init["project"] = "" - request_init["url_map"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2193,17 +1997,16 @@ def test_invalidate_cache_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).invalidate_cache._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" - jsonified_request["urlMap"] = "url_map_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).invalidate_cache._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -2211,8 +2014,6 @@ def test_invalidate_cache_unary_rest_required_fields( # verify required fields with non-default values are left alone assert "project" in jsonified_request assert jsonified_request["project"] == "project_value" - assert "urlMap" in jsonified_request - assert jsonified_request["urlMap"] == "url_map_value" client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2244,33 +2045,32 @@ def test_invalidate_cache_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.invalidate_cache_unary(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_invalidate_cache_unary_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.invalidate_cache._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( ( - "cacheInvalidationRuleResource", "project", - "urlMap", + "urlMapResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_invalidate_cache_unary_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), @@ -2281,9 +2081,9 @@ def test_invalidate_cache_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.UrlMapsRestInterceptor, "post_invalidate_cache" + transports.UrlMapsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.UrlMapsRestInterceptor, "pre_invalidate_cache" + transports.UrlMapsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2300,7 +2100,7 @@ def test_invalidate_cache_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.InvalidateCacheUrlMapRequest() + request = compute.InsertUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -2308,7 +2108,7 @@ def test_invalidate_cache_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.invalidate_cache_unary( + client.insert( request, metadata=[ ("key", "val"), @@ -2320,198 +2120,2783 @@ def test_invalidate_cache_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_invalidate_cache_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InvalidateCacheUrlMapRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertUrlMapRequest ): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"project": "sample1", "url_map": "sample2"} - request_init["cache_invalidation_rule_resource"] = { - "host": "host_value", - "path": "path_value", - } - request = request_type(request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.invalidate_cache_unary(request) - - -def test_invalidate_cache_unary_rest_flattened(): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.Operation() - - # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "url_map": "sample2"} - - # get truthy value for each flattened field - mock_args = dict( - project="project_value", - url_map="url_map_value", - cache_invalidation_rule_resource=compute.CacheInvalidationRule( - host="host_value" - ), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.invalidate_cache_unary(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/compute/v1/projects/{project}/global/urlMaps/{url_map}/invalidateCache" - % client.transport._host, - args[1], - ) - - -def test_invalidate_cache_unary_rest_flattened_error(transport: str = "rest"): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.invalidate_cache_unary( - compute.InvalidateCacheUrlMapRequest(), - project="project_value", - url_map="url_map_value", - cache_invalidation_rule_resource=compute.CacheInvalidationRule( - host="host_value" - ), - ) - - -def test_invalidate_cache_unary_rest_error(): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - -@pytest.mark.parametrize( - "request_type", - [ - compute.ListUrlMapsRequest, - dict, - ], -) -def test_list_rest(request_type): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - # send a request that will satisfy transcoding request_init = {"project": "sample1"} - request = request_type(request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = compute.UrlMapList( - id="id_value", - kind="kind_value", - next_page_token="next_page_token_value", - self_link="self_link_value", - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.UrlMapList.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.list(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" - assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" - assert response.self_link == "self_link_value" + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) -def test_list_rest_required_fields(request_type=compute.ListUrlMapsRequest): - transport_class = transports.UrlMapsRestTransport - request_init = {} - request_init["project"] = "" - request = request_type(request_init) - jsonified_request = json.loads( - request_type.to_json( - request, including_default_value_fields=False, use_integers_for_enums=False - ) +def test_insert_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - # verify fields with default values are dropped + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} - # verify required fields with default values are now present + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) - jsonified_request["project"] = "project_value" + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps" % client.transport._host, + args[1], ) - ) - jsonified_request.update(unset_fields) - # verify required fields with non-default values are left alone - assert "project" in jsonified_request - assert jsonified_request["project"] == "project_value" +def test_insert_rest_flattened_error(transport: str = "rest"): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - request = request_type(request_init) - # Designate an appropriate value for the returned response. - return_value = compute.UrlMapList() - # Mock the http request call within the method and fake a response. + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertUrlMapRequest(), + project="project_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertUrlMapRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields(request_type=compute.InsertUrlMapRequest): + transport_class = transports.UrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "urlMapResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), + ) + client = UrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.UrlMapsRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.UrlMapsRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertUrlMapRequest +): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps" % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertUrlMapRequest(), + project="project_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InvalidateCacheUrlMapRequest, + dict, + ], +) +def test_invalidate_cache_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["cache_invalidation_rule_resource"] = { + "host": "host_value", + "path": "path_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.invalidate_cache(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_invalidate_cache_rest_required_fields( + request_type=compute.InvalidateCacheUrlMapRequest, +): + transport_class = transports.UrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["url_map"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).invalidate_cache._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["urlMap"] = "url_map_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).invalidate_cache._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" + + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.invalidate_cache(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_invalidate_cache_rest_unset_required_fields(): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.invalidate_cache._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "cacheInvalidationRuleResource", + "project", + "urlMap", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_invalidate_cache_rest_interceptors(null_interceptor): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), + ) + client = UrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.UrlMapsRestInterceptor, "post_invalidate_cache" + ) as post, mock.patch.object( + transports.UrlMapsRestInterceptor, "pre_invalidate_cache" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InvalidateCacheUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.invalidate_cache( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_invalidate_cache_rest_bad_request( + transport: str = "rest", request_type=compute.InvalidateCacheUrlMapRequest +): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["cache_invalidation_rule_resource"] = { + "host": "host_value", + "path": "path_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.invalidate_cache(request) + + +def test_invalidate_cache_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "url_map": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + url_map="url_map_value", + cache_invalidation_rule_resource=compute.CacheInvalidationRule( + host="host_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.invalidate_cache(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps/{url_map}/invalidateCache" + % client.transport._host, + args[1], + ) + + +def test_invalidate_cache_rest_flattened_error(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.invalidate_cache( + compute.InvalidateCacheUrlMapRequest(), + project="project_value", + url_map="url_map_value", + cache_invalidation_rule_resource=compute.CacheInvalidationRule( + host="host_value" + ), + ) + + +def test_invalidate_cache_rest_error(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InvalidateCacheUrlMapRequest, + dict, + ], +) +def test_invalidate_cache_unary_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["cache_invalidation_rule_resource"] = { + "host": "host_value", + "path": "path_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.invalidate_cache_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_invalidate_cache_unary_rest_required_fields( + request_type=compute.InvalidateCacheUrlMapRequest, +): + transport_class = transports.UrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["url_map"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).invalidate_cache._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["urlMap"] = "url_map_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).invalidate_cache._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" + + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.invalidate_cache_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_invalidate_cache_unary_rest_unset_required_fields(): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.invalidate_cache._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "cacheInvalidationRuleResource", + "project", + "urlMap", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_invalidate_cache_unary_rest_interceptors(null_interceptor): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), + ) + client = UrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.UrlMapsRestInterceptor, "post_invalidate_cache" + ) as post, mock.patch.object( + transports.UrlMapsRestInterceptor, "pre_invalidate_cache" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InvalidateCacheUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.invalidate_cache_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_invalidate_cache_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InvalidateCacheUrlMapRequest +): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["cache_invalidation_rule_resource"] = { + "host": "host_value", + "path": "path_value", + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.invalidate_cache_unary(request) + + +def test_invalidate_cache_unary_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "url_map": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + url_map="url_map_value", + cache_invalidation_rule_resource=compute.CacheInvalidationRule( + host="host_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.invalidate_cache_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps/{url_map}/invalidateCache" + % client.transport._host, + args[1], + ) + + +def test_invalidate_cache_unary_rest_flattened_error(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.invalidate_cache_unary( + compute.InvalidateCacheUrlMapRequest(), + project="project_value", + url_map="url_map_value", + cache_invalidation_rule_resource=compute.CacheInvalidationRule( + host="host_value" + ), + ) + + +def test_invalidate_cache_unary_rest_error(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListUrlMapsRequest, + dict, + ], +) +def test_list_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UrlMapList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMapList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" + assert response.kind == "kind_value" + assert response.next_page_token == "next_page_token_value" + assert response.self_link == "self_link_value" + + +def test_list_rest_required_fields(request_type=compute.ListUrlMapsRequest): + transport_class = transports.UrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).list._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.UrlMapList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMapList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_list_rest_unset_required_fields(): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_rest_interceptors(null_interceptor): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), + ) + client = UrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.UrlMapsRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.UrlMapsRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.UrlMapList.to_json(compute.UrlMapList()) + + request = compute.ListUrlMapsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.UrlMapList + + client.list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListUrlMapsRequest +): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list(request) + + +def test_list_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.UrlMapList() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.UrlMapList.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps" % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list( + compute.ListUrlMapsRequest(), + project="project_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.UrlMapList( + items=[ + compute.UrlMap(), + compute.UrlMap(), + compute.UrlMap(), + ], + next_page_token="abc", + ), + compute.UrlMapList( + items=[], + next_page_token="def", + ), + compute.UrlMapList( + items=[ + compute.UrlMap(), + ], + next_page_token="ghi", + ), + compute.UrlMapList( + items=[ + compute.UrlMap(), + compute.UrlMap(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.UrlMapList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1"} + + pager = client.list(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.UrlMap) for i in results) + + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchUrlMapRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_patch_rest_required_fields(request_type=compute.PatchUrlMapRequest): + transport_class = transports.UrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["url_map"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["urlMap"] = "url_map_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" + + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_rest_unset_required_fields(): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "urlMap", + "urlMapResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), + ) + client = UrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.UrlMapsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.UrlMapsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_rest_bad_request( + transport: str = "rest", request_type=compute.PatchUrlMapRequest +): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.patch(request) + + +def test_patch_rest_flattened(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "url_map": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.patch(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/global/urlMaps/{url_map}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.patch( + compute.PatchUrlMapRequest(), + project="project_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_patch_rest_error(): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchUrlMapRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.patch_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_patch_unary_rest_required_fields(request_type=compute.PatchUrlMapRequest): + transport_class = transports.UrlMapsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["url_map"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["urlMap"] = "url_map_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).patch._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "urlMap" in jsonified_request + assert jsonified_request["urlMap"] == "url_map_value" + + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values # for required fields will fail the real version if the http_options @@ -2521,105 +4906,273 @@ def test_list_rest_required_fields(request_type=compute.ListUrlMapsRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "patch", "query_params": request_init, } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = compute.UrlMapList.to_json(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.list(request) - - expected_params = [] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params - - -def test_list_rest_unset_required_fields(): - transport = transports.UrlMapsRestTransport( - credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.list._get_unset_required_fields({}) - assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) - & set(("project",)) - ) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): - transport = transports.UrlMapsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), - ) - client = UrlMapsClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.UrlMapsRestInterceptor, "post_list" - ) as post, mock.patch.object( - transports.UrlMapsRestInterceptor, "pre_list" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": None, - "query_params": {}, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = compute.UrlMapList.to_json(compute.UrlMapList()) - - request = compute.ListUrlMapsRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = compute.UrlMapList - - client.list( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListUrlMapsRequest -): - client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"project": "sample1"} + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.patch_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_patch_unary_rest_unset_required_fields(): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "urlMap", + "urlMapResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.UrlMapsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), + ) + client = UrlMapsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.UrlMapsRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.UrlMapsRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.PatchUrlMapRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.patch_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_patch_unary_rest_bad_request( + transport: str = "rest", request_type=compute.PatchUrlMapRequest +): + client = UrlMapsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "url_map": "sample2"} + request_init["url_map_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "default_route_action": { + "cors_policy": { + "allow_credentials": True, + "allow_headers": ["allow_headers_value_1", "allow_headers_value_2"], + "allow_methods": ["allow_methods_value_1", "allow_methods_value_2"], + "allow_origin_regexes": [ + "allow_origin_regexes_value_1", + "allow_origin_regexes_value_2", + ], + "allow_origins": ["allow_origins_value_1", "allow_origins_value_2"], + "disabled": True, + "expose_headers": ["expose_headers_value_1", "expose_headers_value_2"], + "max_age": 722, + }, + "fault_injection_policy": { + "abort": {"http_status": 1219, "percentage": 0.10540000000000001}, + "delay": { + "fixed_delay": {"nanos": 543, "seconds": 751}, + "percentage": 0.10540000000000001, + }, + }, + "max_stream_duration": {}, + "request_mirror_policy": {"backend_service": "backend_service_value"}, + "retry_policy": { + "num_retries": 1197, + "per_try_timeout": {}, + "retry_conditions": [ + "retry_conditions_value_1", + "retry_conditions_value_2", + ], + }, + "timeout": {}, + "url_rewrite": { + "host_rewrite": "host_rewrite_value", + "path_prefix_rewrite": "path_prefix_rewrite_value", + }, + "weighted_backend_services": [ + { + "backend_service": "backend_service_value", + "header_action": { + "request_headers_to_add": [ + { + "header_name": "header_name_value", + "header_value": "header_value_value", + "replace": True, + } + ], + "request_headers_to_remove": [ + "request_headers_to_remove_value_1", + "request_headers_to_remove_value_2", + ], + "response_headers_to_add": {}, + "response_headers_to_remove": [ + "response_headers_to_remove_value_1", + "response_headers_to_remove_value_2", + ], + }, + "weight": 648, + } + ], + }, + "default_service": "default_service_value", + "default_url_redirect": { + "host_redirect": "host_redirect_value", + "https_redirect": True, + "path_redirect": "path_redirect_value", + "prefix_redirect": "prefix_redirect_value", + "redirect_response_code": "redirect_response_code_value", + "strip_query": True, + }, + "description": "description_value", + "fingerprint": "fingerprint_value", + "header_action": {}, + "host_rules": [ + { + "description": "description_value", + "hosts": ["hosts_value_1", "hosts_value_2"], + "path_matcher": "path_matcher_value", + } + ], + "id": 205, + "kind": "kind_value", + "name": "name_value", + "path_matchers": [ + { + "default_route_action": {}, + "default_service": "default_service_value", + "default_url_redirect": {}, + "description": "description_value", + "header_action": {}, + "name": "name_value", + "path_rules": [ + { + "paths": ["paths_value_1", "paths_value_2"], + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + "route_rules": [ + { + "description": "description_value", + "header_action": {}, + "match_rules": [ + { + "full_path_match": "full_path_match_value", + "header_matches": [ + { + "exact_match": "exact_match_value", + "header_name": "header_name_value", + "invert_match": True, + "prefix_match": "prefix_match_value", + "present_match": True, + "range_match": { + "range_end": 931, + "range_start": 1178, + }, + "regex_match": "regex_match_value", + "suffix_match": "suffix_match_value", + } + ], + "ignore_case": True, + "metadata_filters": [ + { + "filter_labels": [ + { + "name": "name_value", + "value": "value_value", + } + ], + "filter_match_criteria": "filter_match_criteria_value", + } + ], + "prefix_match": "prefix_match_value", + "query_parameter_matches": [ + { + "exact_match": "exact_match_value", + "name": "name_value", + "present_match": True, + "regex_match": "regex_match_value", + } + ], + "regex_match": "regex_match_value", + } + ], + "priority": 898, + "route_action": {}, + "service": "service_value", + "url_redirect": {}, + } + ], + } + ], + "region": "region_value", + "self_link": "self_link_value", + "tests": [ + { + "description": "description_value", + "expected_output_url": "expected_output_url_value", + "expected_redirect_response_code": 3275, + "headers": [{"name": "name_value", "value": "value_value"}], + "host": "host_value", + "path": "path_value", + "service": "service_value", + } + ], + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2631,10 +5184,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.patch_unary(request) -def test_list_rest_flattened(): +def test_patch_unary_rest_flattened(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2643,38 +5196,43 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.UrlMapList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1"} + sample_request = {"project": "sample1", "url_map": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.UrlMapList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.patch_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/global/urlMaps" % client.transport._host, + "%s/compute/v1/projects/{project}/global/urlMaps/{url_map}" + % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_patch_unary_rest_flattened_error(transport: str = "rest"): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2683,81 +5241,30 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListUrlMapsRequest(), + client.patch_unary( + compute.PatchUrlMapRequest(), project="project_value", + url_map="url_map_value", + url_map_resource=compute.UrlMap( + creation_timestamp="creation_timestamp_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_patch_unary_rest_error(): client = UrlMapsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.UrlMapList( - items=[ - compute.UrlMap(), - compute.UrlMap(), - compute.UrlMap(), - ], - next_page_token="abc", - ), - compute.UrlMapList( - items=[], - next_page_token="def", - ), - compute.UrlMapList( - items=[ - compute.UrlMap(), - ], - next_page_token="ghi", - ), - compute.UrlMapList( - items=[ - compute.UrlMap(), - compute.UrlMap(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.UrlMapList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.UrlMap) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - compute.PatchUrlMapRequest, + compute.UpdateUrlMapRequest, dict, ], ) -def test_patch_unary_rest(request_type): +def test_update_rest(request_type): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2970,10 +5477,10 @@ def test_patch_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -2998,7 +5505,7 @@ def test_patch_unary_rest(request_type): assert response.zone == "zone_value" -def test_patch_unary_rest_required_fields(request_type=compute.PatchUrlMapRequest): +def test_update_rest_required_fields(request_type=compute.UpdateUrlMapRequest): transport_class = transports.UrlMapsRestTransport request_init = {} @@ -3015,7 +5522,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchUrlMapReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -3025,7 +5532,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchUrlMapReques unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).patch._get_unset_required_fields(jsonified_request) + ).update._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) @@ -3054,7 +5561,7 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchUrlMapReques # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "patch", + "method": "put", "query_params": request_init, } transcode_result["body"] = {} @@ -3066,19 +5573,19 @@ def test_patch_unary_rest_required_fields(request_type=compute.PatchUrlMapReques response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.patch_unary(request) + response = client.update(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_patch_unary_rest_unset_required_fields(): +def test_update_rest_unset_required_fields(): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.patch._get_unset_required_fields({}) + unset_fields = transport.update._get_unset_required_fields({}) assert set(unset_fields) == ( set(("requestId",)) & set( @@ -3092,7 +5599,7 @@ def test_patch_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_patch_unary_rest_interceptors(null_interceptor): +def test_update_rest_interceptors(null_interceptor): transport = transports.UrlMapsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None if null_interceptor else transports.UrlMapsRestInterceptor(), @@ -3103,9 +5610,9 @@ def test_patch_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.UrlMapsRestInterceptor, "post_patch" + transports.UrlMapsRestInterceptor, "post_update" ) as post, mock.patch.object( - transports.UrlMapsRestInterceptor, "pre_patch" + transports.UrlMapsRestInterceptor, "pre_update" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -3122,7 +5629,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.PatchUrlMapRequest() + request = compute.UpdateUrlMapRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -3130,7 +5637,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.patch_unary( + client.update( request, metadata=[ ("key", "val"), @@ -3142,8 +5649,8 @@ def test_patch_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_patch_unary_rest_bad_request( - transport: str = "rest", request_type=compute.PatchUrlMapRequest +def test_update_rest_bad_request( + transport: str = "rest", request_type=compute.UpdateUrlMapRequest ): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3332,10 +5839,10 @@ def test_patch_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.patch_unary(request) + client.update(request) -def test_patch_unary_rest_flattened(): +def test_update_rest_flattened(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -3367,7 +5874,7 @@ def test_patch_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.patch_unary(**mock_args) + client.update(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -3380,7 +5887,7 @@ def test_patch_unary_rest_flattened(): ) -def test_patch_unary_rest_flattened_error(transport: str = "rest"): +def test_update_rest_flattened_error(transport: str = "rest"): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3389,8 +5896,8 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.patch_unary( - compute.PatchUrlMapRequest(), + client.update( + compute.UpdateUrlMapRequest(), project="project_value", url_map="url_map_value", url_map_resource=compute.UrlMap( @@ -3399,7 +5906,7 @@ def test_patch_unary_rest_flattened_error(transport: str = "rest"): ) -def test_patch_unary_rest_error(): +def test_update_rest_error(): client = UrlMapsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -3629,28 +6136,6 @@ def test_update_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_update_unary_rest_required_fields(request_type=compute.UpdateUrlMapRequest): @@ -4763,6 +7248,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = UrlMapsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_url_maps_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -4802,6 +7300,14 @@ def test_url_maps_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_url_maps_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_vpn_gateways.py b/tests/unit/gapic/compute_v1/test_vpn_gateways.py index 1cc45f197..cb1e2e6c6 100644 --- a/tests/unit/gapic/compute_v1/test_vpn_gateways.py +++ b/tests/unit/gapic/compute_v1/test_vpn_gateways.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -871,7 +873,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -915,10 +917,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -943,9 +945,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields( - request_type=compute.DeleteVpnGatewayRequest, -): +def test_delete_rest_required_fields(request_type=compute.DeleteVpnGatewayRequest): transport_class = transports.VpnGatewaysRestTransport request_init = {} @@ -1016,14 +1016,14 @@ def test_delete_unary_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1042,7 +1042,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1082,7 +1082,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1094,7 +1094,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteVpnGatewayRequest ): client = VpnGatewaysClient( @@ -1115,10 +1115,10 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) -def test_delete_unary_rest_flattened(): +def test_delete_rest_flattened(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1152,7 +1152,7 @@ def test_delete_unary_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.delete(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1165,7 +1165,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_delete_rest_flattened_error(transport: str = "rest"): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1174,7 +1174,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( + client.delete( compute.DeleteVpnGatewayRequest(), project="project_value", region="region_value", @@ -1182,7 +1182,7 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): ) -def test_delete_unary_rest_error(): +def test_delete_rest_error(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1191,11 +1191,11 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetVpnGatewayRequest, + compute.DeleteVpnGatewayRequest, dict, ], ) -def test_get_rest(request_type): +def test_delete_unary_rest(request_type): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1208,42 +1208,46 @@ def test_get_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnGateway( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, + insert_time="insert_time_value", kind="kind_value", - label_fingerprint="label_fingerprint_value", name="name_value", - network="network_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", self_link="self_link_value", - stack_type="stack_type_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.VpnGateway) - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.id == 205 - assert response.kind == "kind_value" - assert response.label_fingerprint == "label_fingerprint_value" - assert response.name == "name_value" - assert response.network == "network_value" - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.stack_type == "stack_type_value" + assert isinstance(response, compute.Operation) -def test_get_rest_required_fields(request_type=compute.GetVpnGatewayRequest): +def test_delete_unary_rest_required_fields( + request_type=compute.DeleteVpnGatewayRequest, +): transport_class = transports.VpnGatewaysRestTransport request_init = {} @@ -1261,7 +1265,7 @@ def test_get_rest_required_fields(request_type=compute.GetVpnGatewayRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1272,7 +1276,9 @@ def test_get_rest_required_fields(request_type=compute.GetVpnGatewayRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1290,7 +1296,7 @@ def test_get_rest_required_fields(request_type=compute.GetVpnGatewayRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.VpnGateway() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1301,32 +1307,32 @@ def test_get_rest_required_fields(request_type=compute.GetVpnGatewayRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "delete", "query_params": request_init, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.delete_unary(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_delete_unary_rest_unset_required_fields(): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.delete._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", @@ -1338,7 +1344,7 @@ def test_get_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_delete_unary_rest_interceptors(null_interceptor): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1351,9 +1357,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "post_get" + transports.VpnGatewaysRestInterceptor, "post_delete" ) as post, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "pre_get" + transports.VpnGatewaysRestInterceptor, "pre_delete" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1368,17 +1374,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.VpnGateway.to_json(compute.VpnGateway()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetVpnGatewayRequest() + request = compute.DeleteVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGateway + post.return_value = compute.Operation - client.get( + client.delete_unary( request, metadata=[ ("key", "val"), @@ -1390,8 +1396,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetVpnGatewayRequest +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteVpnGatewayRequest ): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1411,10 +1417,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.delete_unary(request) -def test_get_rest_flattened(): +def test_delete_unary_rest_flattened(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1423,7 +1429,7 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnGateway() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method sample_request = { @@ -1443,12 +1449,12 @@ def test_get_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGateway.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.delete_unary(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1461,7 +1467,7 @@ def test_get_rest_flattened(): ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_delete_unary_rest_flattened_error(transport: str = "rest"): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1470,15 +1476,15 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetVpnGatewayRequest(), + client.delete_unary( + compute.DeleteVpnGatewayRequest(), project="project_value", region="region_value", vpn_gateway="vpn_gateway_value", ) -def test_get_rest_error(): +def test_delete_unary_rest_error(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1487,11 +1493,11 @@ def test_get_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetStatusVpnGatewayRequest, + compute.GetVpnGatewayRequest, dict, ], ) -def test_get_status_rest(request_type): +def test_get_rest(request_type): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1504,23 +1510,42 @@ def test_get_status_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnGatewaysGetStatusResponse() + return_value = compute.VpnGateway( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + label_fingerprint="label_fingerprint_value", + name="name_value", + network="network_value", + region="region_value", + self_link="self_link_value", + stack_type="stack_type_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGatewaysGetStatusResponse.to_json(return_value) + json_return_value = compute.VpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_status(request) + response = client.get(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.VpnGatewaysGetStatusResponse) + assert isinstance(response, compute.VpnGateway) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.id == 205 + assert response.kind == "kind_value" + assert response.label_fingerprint == "label_fingerprint_value" + assert response.name == "name_value" + assert response.network == "network_value" + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.stack_type == "stack_type_value" -def test_get_status_rest_required_fields( - request_type=compute.GetStatusVpnGatewayRequest, -): +def test_get_rest_required_fields(request_type=compute.GetVpnGatewayRequest): transport_class = transports.VpnGatewaysRestTransport request_init = {} @@ -1538,7 +1563,7 @@ def test_get_status_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_status._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1549,7 +1574,7 @@ def test_get_status_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_status._get_unset_required_fields(jsonified_request) + ).get._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1567,7 +1592,7 @@ def test_get_status_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.VpnGatewaysGetStatusResponse() + return_value = compute.VpnGateway() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1585,25 +1610,23 @@ def test_get_status_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGatewaysGetStatusResponse.to_json( - return_value - ) + json_return_value = compute.VpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_status(request) + response = client.get(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_status_rest_unset_required_fields(): +def test_get_rest_unset_required_fields(): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_status._get_unset_required_fields({}) + unset_fields = transport.get._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( @@ -1617,7 +1640,7 @@ def test_get_status_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_status_rest_interceptors(null_interceptor): +def test_get_rest_interceptors(null_interceptor): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1630,9 +1653,9 @@ def test_get_status_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "post_get_status" + transports.VpnGatewaysRestInterceptor, "post_get" ) as post, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "pre_get_status" + transports.VpnGatewaysRestInterceptor, "pre_get" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1647,19 +1670,17 @@ def test_get_status_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.VpnGatewaysGetStatusResponse.to_json( - compute.VpnGatewaysGetStatusResponse() - ) + req.return_value._content = compute.VpnGateway.to_json(compute.VpnGateway()) - request = compute.GetStatusVpnGatewayRequest() + request = compute.GetVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGatewaysGetStatusResponse + post.return_value = compute.VpnGateway - client.get_status( + client.get( request, metadata=[ ("key", "val"), @@ -1671,8 +1692,8 @@ def test_get_status_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_status_rest_bad_request( - transport: str = "rest", request_type=compute.GetStatusVpnGatewayRequest +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetVpnGatewayRequest ): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1692,10 +1713,10 @@ def test_get_status_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_status(request) + client.get(request) -def test_get_status_rest_flattened(): +def test_get_rest_flattened(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1704,7 +1725,7 @@ def test_get_status_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnGatewaysGetStatusResponse() + return_value = compute.VpnGateway() # get arguments that satisfy an http rule for this method sample_request = { @@ -1724,25 +1745,25 @@ def test_get_status_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGatewaysGetStatusResponse.to_json(return_value) + json_return_value = compute.VpnGateway.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_status(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways/{vpn_gateway}/getStatus" + "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways/{vpn_gateway}" % client.transport._host, args[1], ) -def test_get_status_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1751,15 +1772,15 @@ def test_get_status_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_status( - compute.GetStatusVpnGatewayRequest(), + client.get( + compute.GetVpnGatewayRequest(), project="project_value", region="region_value", vpn_gateway="vpn_gateway_value", ) -def test_get_status_rest_error(): +def test_get_rest_error(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1768,63 +1789,703 @@ def test_get_status_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.InsertVpnGatewayRequest, + compute.GetStatusVpnGatewayRequest, dict, ], ) -def test_insert_unary_rest(request_type): +def test_get_status_rest(request_type): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} - request_init["vpn_gateway_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "name": "name_value", - "network": "network_value", - "region": "region_value", - "self_link": "self_link_value", - "stack_type": "stack_type_value", - "vpn_interfaces": [ - { - "id": 205, - "interconnect_attachment": "interconnect_attachment_value", - "ip_address": "ip_address_value", - } - ], - } + request_init = {"project": "sample1", "region": "sample2", "vpn_gateway": "sample3"} request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation( - client_operation_id="client_operation_id_value", - creation_timestamp="creation_timestamp_value", - description="description_value", - end_time="end_time_value", - http_error_message="http_error_message_value", - http_error_status_code=2374, - id=205, - insert_time="insert_time_value", - kind="kind_value", - name="name_value", - operation_group_id="operation_group_id_value", - operation_type="operation_type_value", - progress=885, - region="region_value", - self_link="self_link_value", - start_time="start_time_value", - status=compute.Operation.Status.DONE, - status_message="status_message_value", - target_id=947, + return_value = compute.VpnGatewaysGetStatusResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.VpnGatewaysGetStatusResponse.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_status(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.VpnGatewaysGetStatusResponse) + + +def test_get_status_rest_required_fields( + request_type=compute.GetStatusVpnGatewayRequest, +): + transport_class = transports.VpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["vpn_gateway"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_status._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["vpnGateway"] = "vpn_gateway_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_status._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "vpnGateway" in jsonified_request + assert jsonified_request["vpnGateway"] == "vpn_gateway_value" + + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.VpnGatewaysGetStatusResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.VpnGatewaysGetStatusResponse.to_json( + return_value + ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_status(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_status_rest_unset_required_fields(): + transport = transports.VpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_status._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "vpnGateway", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_status_rest_interceptors(null_interceptor): + transport = transports.VpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.VpnGatewaysRestInterceptor(), + ) + client = VpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.VpnGatewaysRestInterceptor, "post_get_status" + ) as post, mock.patch.object( + transports.VpnGatewaysRestInterceptor, "pre_get_status" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.VpnGatewaysGetStatusResponse.to_json( + compute.VpnGatewaysGetStatusResponse() + ) + + request = compute.GetStatusVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.VpnGatewaysGetStatusResponse + + client.get_status( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_status_rest_bad_request( + transport: str = "rest", request_type=compute.GetStatusVpnGatewayRequest +): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "vpn_gateway": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_status(request) + + +def test_get_status_rest_flattened(): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.VpnGatewaysGetStatusResponse() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "vpn_gateway": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + vpn_gateway="vpn_gateway_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.VpnGatewaysGetStatusResponse.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_status(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways/{vpn_gateway}/getStatus" + % client.transport._host, + args[1], + ) + + +def test_get_status_rest_flattened_error(transport: str = "rest"): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_status( + compute.GetStatusVpnGatewayRequest(), + project="project_value", + region="region_value", + vpn_gateway="vpn_gateway_value", + ) + + +def test_get_status_rest_error(): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertVpnGatewayRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "vpn_interfaces": [ + { + "id": 205, + "interconnect_attachment": "interconnect_attachment_value", + "ip_address": "ip_address_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.insert(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" + assert response.kind == "kind_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" + assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" + + +def test_insert_rest_required_fields(request_type=compute.InsertVpnGatewayRequest): + transport_class = transports.VpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_rest_unset_required_fields(): + transport = transports.VpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "vpnGatewayResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.VpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.VpnGatewaysRestInterceptor(), + ) + client = VpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.VpnGatewaysRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.VpnGatewaysRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertVpnGatewayRequest +): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "vpn_interfaces": [ + { + "id": 205, + "interconnect_attachment": "interconnect_attachment_value", + "ip_address": "ip_address_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert(request) + + +def test_insert_rest_flattened(): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + vpn_gateway_resource=compute.VpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert( + compute.InsertVpnGatewayRequest(), + project="project_value", + region="region_value", + vpn_gateway_resource=compute.VpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertVpnGatewayRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "vpn_interfaces": [ + { + "id": 205, + "interconnect_attachment": "interconnect_attachment_value", + "ip_address": "ip_address_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, target_link="target_link_value", user="user_value", zone="zone_value", @@ -1836,37 +2497,318 @@ def test_insert_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.insert_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_insert_unary_rest_required_fields( + request_type=compute.InsertVpnGatewayRequest, +): + transport_class = transports.VpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": request_init, + } + transcode_result["body"] = {} + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.insert_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_insert_unary_rest_unset_required_fields(): + transport = transports.VpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "vpnGatewayResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.VpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.VpnGatewaysRestInterceptor(), + ) + client = VpnGatewaysClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.VpnGatewaysRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.VpnGatewaysRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.InsertVpnGatewayRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.insert_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_insert_unary_rest_bad_request( + transport: str = "rest", request_type=compute.InsertVpnGatewayRequest +): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["vpn_gateway_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "id": 205, + "kind": "kind_value", + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + "name": "name_value", + "network": "network_value", + "region": "region_value", + "self_link": "self_link_value", + "stack_type": "stack_type_value", + "vpn_interfaces": [ + { + "id": 205, + "interconnect_attachment": "interconnect_attachment_value", + "ip_address": "ip_address_value", + } + ], + } + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.insert_unary(request) + + +def test_insert_unary_rest_flattened(): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = {"project": "sample1", "region": "sample2"} + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + vpn_gateway_resource=compute.VpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.insert_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.insert_unary( + compute.InsertVpnGatewayRequest(), + project="project_value", + region="region_value", + vpn_gateway_resource=compute.VpnGateway( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListVpnGatewaysRequest, + dict, + ], +) +def test_list_rest(request_type): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.VpnGatewayList( + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.VpnGatewayList.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.list(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" + assert isinstance(response, pagers.ListPager) + assert response.id == "id_value" assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" + assert response.next_page_token == "next_page_token_value" assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" -def test_insert_unary_rest_required_fields( - request_type=compute.InsertVpnGatewayRequest, -): +def test_list_rest_required_fields(request_type=compute.ListVpnGatewaysRequest): transport_class = transports.VpnGatewaysRestTransport request_init = {} @@ -1883,7 +2825,7 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).list._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -1893,9 +2835,17 @@ def test_insert_unary_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).insert._get_unset_required_fields(jsonified_request) + ).list._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("request_id",)) + assert not set(unset_fields) - set( + ( + "filter", + "max_results", + "order_by", + "page_token", + "return_partial_success", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1911,7 +2861,7 @@ def test_insert_unary_rest_required_fields( request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.VpnGatewayList() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1922,45 +2872,51 @@ def test_insert_unary_rest_required_fields( # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": request_init, } - transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.VpnGatewayList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.insert_unary(request) + response = client.list(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_insert_unary_rest_unset_required_fields(): +def test_list_rest_unset_required_fields(): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.insert._get_unset_required_fields({}) + unset_fields = transport.list._get_unset_required_fields({}) assert set(unset_fields) == ( - set(("requestId",)) + set( + ( + "filter", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) & set( ( "project", "region", - "vpnGatewayResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_insert_unary_rest_interceptors(null_interceptor): +def test_list_rest_interceptors(null_interceptor): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1973,9 +2929,9 @@ def test_insert_unary_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "post_insert" + transports.VpnGatewaysRestInterceptor, "post_list" ) as post, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "pre_insert" + transports.VpnGatewaysRestInterceptor, "pre_list" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1990,17 +2946,19 @@ def test_insert_unary_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.Operation.to_json(compute.Operation()) + req.return_value._content = compute.VpnGatewayList.to_json( + compute.VpnGatewayList() + ) - request = compute.InsertVpnGatewayRequest() + request = compute.ListVpnGatewaysRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.VpnGatewayList - client.insert_unary( + client.list( request, metadata=[ ("key", "val"), @@ -2012,8 +2970,8 @@ def test_insert_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_insert_unary_rest_bad_request( - transport: str = "rest", request_type=compute.InsertVpnGatewayRequest +def test_list_rest_bad_request( + transport: str = "rest", request_type=compute.ListVpnGatewaysRequest ): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2022,26 +2980,6 @@ def test_insert_unary_rest_bad_request( # send a request that will satisfy transcoding request_init = {"project": "sample1", "region": "sample2"} - request_init["vpn_gateway_resource"] = { - "creation_timestamp": "creation_timestamp_value", - "description": "description_value", - "id": 205, - "kind": "kind_value", - "label_fingerprint": "label_fingerprint_value", - "labels": {}, - "name": "name_value", - "network": "network_value", - "region": "region_value", - "self_link": "self_link_value", - "stack_type": "stack_type_value", - "vpn_interfaces": [ - { - "id": 205, - "interconnect_attachment": "interconnect_attachment_value", - "ip_address": "ip_address_value", - } - ], - } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2053,10 +2991,10 @@ def test_insert_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.insert_unary(request) + client.list(request) -def test_insert_unary_rest_flattened(): +def test_list_rest_flattened(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2065,7 +3003,7 @@ def test_insert_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.VpnGatewayList() # get arguments that satisfy an http rule for this method sample_request = {"project": "sample1", "region": "sample2"} @@ -2074,21 +3012,18 @@ def test_insert_unary_rest_flattened(): mock_args = dict( project="project_value", region="region_value", - vpn_gateway_resource=compute.VpnGateway( - creation_timestamp="creation_timestamp_value" - ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.VpnGatewayList.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.insert_unary(**mock_args) + client.list(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -2101,7 +3036,7 @@ def test_insert_unary_rest_flattened(): ) -def test_insert_unary_rest_flattened_error(transport: str = "rest"): +def test_list_rest_flattened_error(transport: str = "rest"): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2110,71 +3045,166 @@ def test_insert_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.insert_unary( - compute.InsertVpnGatewayRequest(), + client.list( + compute.ListVpnGatewaysRequest(), project="project_value", region="region_value", - vpn_gateway_resource=compute.VpnGateway( - creation_timestamp="creation_timestamp_value" + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = VpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + compute.VpnGatewayList( + items=[ + compute.VpnGateway(), + compute.VpnGateway(), + compute.VpnGateway(), + ], + next_page_token="abc", + ), + compute.VpnGatewayList( + items=[], + next_page_token="def", + ), + compute.VpnGatewayList( + items=[ + compute.VpnGateway(), + ], + next_page_token="ghi", + ), + compute.VpnGatewayList( + items=[ + compute.VpnGateway(), + compute.VpnGateway(), + ], ), ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.VpnGatewayList.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"project": "sample1", "region": "sample2"} + + pager = client.list(request=sample_request) + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, compute.VpnGateway) for i in results) -def test_insert_unary_rest_error(): - client = VpnGatewaysClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + pages = list(client.list(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - compute.ListVpnGatewaysRequest, + compute.SetLabelsVpnGatewayRequest, dict, ], ) -def test_list_rest(request_type): +def test_set_labels_rest(request_type): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnGatewayList( - id="id_value", + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", kind="kind_value", - next_page_token="next_page_token_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGatewayList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_labels(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListPager) - assert response.id == "id_value" + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 + assert response.id == 205 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.next_page_token == "next_page_token_value" + assert response.name == "name_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 + assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_list_rest_required_fields(request_type=compute.ListVpnGatewaysRequest): +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsVpnGatewayRequest, +): transport_class = transports.VpnGatewaysRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" + request_init["resource"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -2186,27 +3216,20 @@ def test_list_rest_required_fields(request_type=compute.ListVpnGatewaysRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list._get_unset_required_fields(jsonified_request) + ).set_labels._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "filter", - "max_results", - "order_by", - "page_token", - "return_partial_success", - ) - ) + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -2214,6 +3237,8 @@ def test_list_rest_required_fields(request_type=compute.ListVpnGatewaysRequest): assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2222,7 +3247,7 @@ def test_list_rest_required_fields(request_type=compute.ListVpnGatewaysRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.VpnGatewayList() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -2233,51 +3258,46 @@ def test_list_rest_required_fields(request_type=compute.ListVpnGatewaysRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGatewayList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list(request) + response = client.set_labels(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_rest_unset_required_fields(): +def test_set_labels_rest_unset_required_fields(): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list._get_unset_required_fields({}) + unset_fields = transport.set_labels._get_unset_required_fields({}) assert set(unset_fields) == ( - set( - ( - "filter", - "maxResults", - "orderBy", - "pageToken", - "returnPartialSuccess", - ) - ) + set(("requestId",)) & set( ( "project", "region", + "regionSetLabelsRequestResource", + "resource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_rest_interceptors(null_interceptor): +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.VpnGatewaysRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -2290,9 +3310,9 @@ def test_list_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "post_list" + transports.VpnGatewaysRestInterceptor, "post_set_labels" ) as post, mock.patch.object( - transports.VpnGatewaysRestInterceptor, "pre_list" + transports.VpnGatewaysRestInterceptor, "pre_set_labels" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -2307,19 +3327,17 @@ def test_list_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.VpnGatewayList.to_json( - compute.VpnGatewayList() - ) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.ListVpnGatewaysRequest() + request = compute.SetLabelsVpnGatewayRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGatewayList + post.return_value = compute.Operation - client.list( + client.set_labels( request, metadata=[ ("key", "val"), @@ -2331,8 +3349,8 @@ def test_list_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_rest_bad_request( - transport: str = "rest", request_type=compute.ListVpnGatewaysRequest +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsVpnGatewayRequest ): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), @@ -2340,7 +3358,11 @@ def test_list_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2"} + request_init = {"project": "sample1", "region": "sample2", "resource": "sample3"} + request_init["region_set_labels_request_resource"] = { + "label_fingerprint": "label_fingerprint_value", + "labels": {}, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2352,10 +3374,10 @@ def test_list_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list(request) + client.set_labels(request) -def test_list_rest_flattened(): +def test_set_labels_rest_flattened(): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -2364,40 +3386,48 @@ def test_list_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnGatewayList() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = {"project": "sample1", "region": "sample2"} + sample_request = { + "project": "sample1", + "region": "sample2", + "resource": "sample3", + } # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", + resource="resource_value", + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnGatewayList.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list(**mock_args) + client.set_labels(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways" + "%s/compute/v1/projects/{project}/regions/{region}/vpnGateways/{resource}/setLabels" % client.transport._host, args[1], ) -def test_list_rest_flattened_error(transport: str = "rest"): +def test_set_labels_rest_flattened_error(transport: str = "rest"): client = VpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2406,73 +3436,22 @@ def test_list_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list( - compute.ListVpnGatewaysRequest(), + client.set_labels( + compute.SetLabelsVpnGatewayRequest(), project="project_value", region="region_value", + resource="resource_value", + region_set_labels_request_resource=compute.RegionSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), ) -def test_list_rest_pager(transport: str = "rest"): +def test_set_labels_rest_error(): client = VpnGatewaysClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - compute.VpnGatewayList( - items=[ - compute.VpnGateway(), - compute.VpnGateway(), - compute.VpnGateway(), - ], - next_page_token="abc", - ), - compute.VpnGatewayList( - items=[], - next_page_token="def", - ), - compute.VpnGatewayList( - items=[ - compute.VpnGateway(), - ], - next_page_token="ghi", - ), - compute.VpnGatewayList( - items=[ - compute.VpnGateway(), - compute.VpnGateway(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(compute.VpnGatewayList.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"project": "sample1", "region": "sample2"} - - pager = client.list(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, compute.VpnGateway) for i in results) - - pages = list(client.list(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", @@ -2533,28 +3512,6 @@ def test_set_labels_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_set_labels_unary_rest_required_fields( @@ -3185,6 +4142,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = VpnGatewaysClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_vpn_gateways_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -3223,6 +4193,14 @@ def test_vpn_gateways_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_vpn_gateways_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_vpn_tunnels.py b/tests/unit/gapic/compute_v1/test_vpn_tunnels.py index 065f72dca..734abb3d2 100644 --- a/tests/unit/gapic/compute_v1/test_vpn_tunnels.py +++ b/tests/unit/gapic/compute_v1/test_vpn_tunnels.py @@ -30,6 +30,8 @@ from google.api_core import client_options from google.api_core import exceptions as core_exceptions +from google.api_core import extended_operation # type: ignore +from google.api_core import future from google.api_core import gapic_v1 from google.api_core import grpc_helpers from google.api_core import grpc_helpers_async @@ -868,7 +870,7 @@ def test_aggregated_list_rest_pager(transport: str = "rest"): dict, ], ) -def test_delete_unary_rest(request_type): +def test_delete_rest(request_type): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -912,10 +914,10 @@ def test_delete_unary_rest(request_type): json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.Operation) + assert isinstance(response, extended_operation.ExtendedOperation) assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" @@ -940,7 +942,7 @@ def test_delete_unary_rest(request_type): assert response.zone == "zone_value" -def test_delete_unary_rest_required_fields(request_type=compute.DeleteVpnTunnelRequest): +def test_delete_rest_required_fields(request_type=compute.DeleteVpnTunnelRequest): transport_class = transports.VpnTunnelsRestTransport request_init = {} @@ -1011,14 +1013,14 @@ def test_delete_unary_rest_required_fields(request_type=compute.DeleteVpnTunnelR response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_unary(request) + response = client.delete(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_unary_rest_unset_required_fields(): +def test_delete_rest_unset_required_fields(): transport = transports.VpnTunnelsRestTransport( credentials=ga_credentials.AnonymousCredentials ) @@ -1037,7 +1039,7 @@ def test_delete_unary_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_unary_rest_interceptors(null_interceptor): +def test_delete_rest_interceptors(null_interceptor): transport = transports.VpnTunnelsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1077,7 +1079,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = compute.Operation - client.delete_unary( + client.delete( request, metadata=[ ("key", "val"), @@ -1089,7 +1091,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): post.assert_called_once() -def test_delete_unary_rest_bad_request( +def test_delete_rest_bad_request( transport: str = "rest", request_type=compute.DeleteVpnTunnelRequest ): client = VpnTunnelsClient( @@ -1110,10 +1112,630 @@ def test_delete_unary_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_unary(request) + client.delete(request) + + +def test_delete_rest_flattened(): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "vpn_tunnel": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + vpn_tunnel="vpn_tunnel_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/vpnTunnels/{vpn_tunnel}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete( + compute.DeleteVpnTunnelRequest(), + project="project_value", + region="region_value", + vpn_tunnel="vpn_tunnel_value", + ) + + +def test_delete_rest_error(): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteVpnTunnelRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "vpn_tunnel": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_unary(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.Operation) + + +def test_delete_unary_rest_required_fields(request_type=compute.DeleteVpnTunnelRequest): + transport_class = transports.VpnTunnelsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["vpn_tunnel"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["vpnTunnel"] = "vpn_tunnel_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "vpnTunnel" in jsonified_request + assert jsonified_request["vpnTunnel"] == "vpn_tunnel_value" + + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_unary(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_unary_rest_unset_required_fields(): + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "vpnTunnel", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.VpnTunnelsRestInterceptor(), + ) + client = VpnTunnelsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.VpnTunnelsRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.VpnTunnelsRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) + + request = compute.DeleteVpnTunnelRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation + + client.delete_unary( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_delete_unary_rest_bad_request( + transport: str = "rest", request_type=compute.DeleteVpnTunnelRequest +): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "vpn_tunnel": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.Operation() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "vpn_tunnel": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_value", + vpn_tunnel="vpn_tunnel_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.Operation.to_json(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_unary(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/compute/v1/projects/{project}/regions/{region}/vpnTunnels/{vpn_tunnel}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_unary( + compute.DeleteVpnTunnelRequest(), + project="project_value", + region="region_value", + vpn_tunnel="vpn_tunnel_value", + ) + + +def test_delete_unary_rest_error(): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetVpnTunnelRequest, + dict, + ], +) +def test_get_rest(request_type): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "vpn_tunnel": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = compute.VpnTunnel( + creation_timestamp="creation_timestamp_value", + description="description_value", + detailed_status="detailed_status_value", + id=205, + ike_version=1182, + kind="kind_value", + local_traffic_selector=["local_traffic_selector_value"], + name="name_value", + peer_external_gateway="peer_external_gateway_value", + peer_external_gateway_interface=3279, + peer_gcp_gateway="peer_gcp_gateway_value", + peer_ip="peer_ip_value", + region="region_value", + remote_traffic_selector=["remote_traffic_selector_value"], + router="router_value", + self_link="self_link_value", + shared_secret="shared_secret_value", + shared_secret_hash="shared_secret_hash_value", + status="status_value", + target_vpn_gateway="target_vpn_gateway_value", + vpn_gateway="vpn_gateway_value", + vpn_gateway_interface=2229, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.VpnTunnel.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, compute.VpnTunnel) + assert response.creation_timestamp == "creation_timestamp_value" + assert response.description == "description_value" + assert response.detailed_status == "detailed_status_value" + assert response.id == 205 + assert response.ike_version == 1182 + assert response.kind == "kind_value" + assert response.local_traffic_selector == ["local_traffic_selector_value"] + assert response.name == "name_value" + assert response.peer_external_gateway == "peer_external_gateway_value" + assert response.peer_external_gateway_interface == 3279 + assert response.peer_gcp_gateway == "peer_gcp_gateway_value" + assert response.peer_ip == "peer_ip_value" + assert response.region == "region_value" + assert response.remote_traffic_selector == ["remote_traffic_selector_value"] + assert response.router == "router_value" + assert response.self_link == "self_link_value" + assert response.shared_secret == "shared_secret_value" + assert response.shared_secret_hash == "shared_secret_hash_value" + assert response.status == "status_value" + assert response.target_vpn_gateway == "target_vpn_gateway_value" + assert response.vpn_gateway == "vpn_gateway_value" + assert response.vpn_gateway_interface == 2229 + + +def test_get_rest_required_fields(request_type=compute.GetVpnTunnelRequest): + transport_class = transports.VpnTunnelsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["vpn_tunnel"] = "" + request = request_type(request_init) + jsonified_request = json.loads( + request_type.to_json( + request, including_default_value_fields=False, use_integers_for_enums=False + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["project"] = "project_value" + jsonified_request["region"] = "region_value" + jsonified_request["vpnTunnel"] = "vpn_tunnel_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "project" in jsonified_request + assert jsonified_request["project"] == "project_value" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "vpnTunnel" in jsonified_request + assert jsonified_request["vpnTunnel"] == "vpn_tunnel_value" + + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(request_init) + + # Designate an appropriate value for the returned response. + return_value = compute.VpnTunnel() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": request_init, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = compute.VpnTunnel.to_json(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_rest_unset_required_fields(): + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "vpnTunnel", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.VpnTunnelsRestInterceptor(), + ) + client = VpnTunnelsClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.VpnTunnelsRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.VpnTunnelsRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": None, + "query_params": {}, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.VpnTunnel.to_json(compute.VpnTunnel()) + + request = compute.GetVpnTunnelRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.VpnTunnel + + client.get( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_rest_bad_request( + transport: str = "rest", request_type=compute.GetVpnTunnelRequest +): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "vpn_tunnel": "sample3"} + request = request_type(request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get(request) -def test_delete_unary_rest_flattened(): +def test_get_rest_flattened(): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1122,7 +1744,7 @@ def test_delete_unary_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.Operation() + return_value = compute.VpnTunnel() # get arguments that satisfy an http rule for this method sample_request = { @@ -1142,12 +1764,12 @@ def test_delete_unary_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.Operation.to_json(return_value) + json_return_value = compute.VpnTunnel.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_unary(**mock_args) + client.get(**mock_args) # Establish that the underlying call was made with the expected # request object values. @@ -1160,7 +1782,7 @@ def test_delete_unary_rest_flattened(): ) -def test_delete_unary_rest_flattened_error(transport: str = "rest"): +def test_get_rest_flattened_error(transport: str = "rest"): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1169,15 +1791,15 @@ def test_delete_unary_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_unary( - compute.DeleteVpnTunnelRequest(), + client.get( + compute.GetVpnTunnelRequest(), project="project_value", region="region_value", vpn_tunnel="vpn_tunnel_value", ) -def test_delete_unary_rest_error(): +def test_get_rest_error(): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1186,89 +1808,118 @@ def test_delete_unary_rest_error(): @pytest.mark.parametrize( "request_type", [ - compute.GetVpnTunnelRequest, + compute.InsertVpnTunnelRequest, dict, ], ) -def test_get_rest(request_type): +def test_insert_rest(request_type): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "vpn_tunnel": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["vpn_tunnel_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "detailed_status": "detailed_status_value", + "id": 205, + "ike_version": 1182, + "kind": "kind_value", + "local_traffic_selector": [ + "local_traffic_selector_value_1", + "local_traffic_selector_value_2", + ], + "name": "name_value", + "peer_external_gateway": "peer_external_gateway_value", + "peer_external_gateway_interface": 3279, + "peer_gcp_gateway": "peer_gcp_gateway_value", + "peer_ip": "peer_ip_value", + "region": "region_value", + "remote_traffic_selector": [ + "remote_traffic_selector_value_1", + "remote_traffic_selector_value_2", + ], + "router": "router_value", + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "shared_secret_hash": "shared_secret_hash_value", + "status": "status_value", + "target_vpn_gateway": "target_vpn_gateway_value", + "vpn_gateway": "vpn_gateway_value", + "vpn_gateway_interface": 2229, + } request = request_type(request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnTunnel( + return_value = compute.Operation( + client_operation_id="client_operation_id_value", creation_timestamp="creation_timestamp_value", description="description_value", - detailed_status="detailed_status_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, id=205, - ike_version=1182, + insert_time="insert_time_value", kind="kind_value", - local_traffic_selector=["local_traffic_selector_value"], name="name_value", - peer_external_gateway="peer_external_gateway_value", - peer_external_gateway_interface=3279, - peer_gcp_gateway="peer_gcp_gateway_value", - peer_ip="peer_ip_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, region="region_value", - remote_traffic_selector=["remote_traffic_selector_value"], - router="router_value", self_link="self_link_value", - shared_secret="shared_secret_value", - shared_secret_hash="shared_secret_hash_value", - status="status_value", - target_vpn_gateway="target_vpn_gateway_value", - vpn_gateway="vpn_gateway_value", - vpn_gateway_interface=2229, + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnTunnel.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) # Establish that the response is the type that we expect. - assert isinstance(response, compute.VpnTunnel) + assert isinstance(response, extended_operation.ExtendedOperation) + assert response.client_operation_id == "client_operation_id_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.description == "description_value" - assert response.detailed_status == "detailed_status_value" + assert response.end_time == "end_time_value" + assert response.http_error_message == "http_error_message_value" + assert response.http_error_status_code == 2374 assert response.id == 205 - assert response.ike_version == 1182 + assert response.insert_time == "insert_time_value" assert response.kind == "kind_value" - assert response.local_traffic_selector == ["local_traffic_selector_value"] assert response.name == "name_value" - assert response.peer_external_gateway == "peer_external_gateway_value" - assert response.peer_external_gateway_interface == 3279 - assert response.peer_gcp_gateway == "peer_gcp_gateway_value" - assert response.peer_ip == "peer_ip_value" + assert response.operation_group_id == "operation_group_id_value" + assert response.operation_type == "operation_type_value" + assert response.progress == 885 assert response.region == "region_value" - assert response.remote_traffic_selector == ["remote_traffic_selector_value"] - assert response.router == "router_value" assert response.self_link == "self_link_value" - assert response.shared_secret == "shared_secret_value" - assert response.shared_secret_hash == "shared_secret_hash_value" - assert response.status == "status_value" - assert response.target_vpn_gateway == "target_vpn_gateway_value" - assert response.vpn_gateway == "vpn_gateway_value" - assert response.vpn_gateway_interface == 2229 + assert response.start_time == "start_time_value" + assert response.status == compute.Operation.Status.DONE + assert response.status_message == "status_message_value" + assert response.target_id == 947 + assert response.target_link == "target_link_value" + assert response.user == "user_value" + assert response.zone == "zone_value" -def test_get_rest_required_fields(request_type=compute.GetVpnTunnelRequest): +def test_insert_rest_required_fields(request_type=compute.InsertVpnTunnelRequest): transport_class = transports.VpnTunnelsRestTransport request_init = {} request_init["project"] = "" request_init["region"] = "" - request_init["vpn_tunnel"] = "" request = request_type(request_init) jsonified_request = json.loads( request_type.to_json( @@ -1280,18 +1931,19 @@ def test_get_rest_required_fields(request_type=compute.GetVpnTunnelRequest): unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["project"] = "project_value" jsonified_request["region"] = "region_value" - jsonified_request["vpnTunnel"] = "vpn_tunnel_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get._get_unset_required_fields(jsonified_request) + ).insert._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("request_id",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -1299,8 +1951,6 @@ def test_get_rest_required_fields(request_type=compute.GetVpnTunnelRequest): assert jsonified_request["project"] == "project_value" assert "region" in jsonified_request assert jsonified_request["region"] == "region_value" - assert "vpnTunnel" in jsonified_request - assert jsonified_request["vpnTunnel"] == "vpn_tunnel_value" client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1309,7 +1959,7 @@ def test_get_rest_required_fields(request_type=compute.GetVpnTunnelRequest): request = request_type(request_init) # Designate an appropriate value for the returned response. - return_value = compute.VpnTunnel() + return_value = compute.Operation() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -1320,44 +1970,45 @@ def test_get_rest_required_fields(request_type=compute.GetVpnTunnelRequest): # request fields to show up in the query_params. transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": request_init, } + transcode_result["body"] = {} transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnTunnel.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get(request) + response = client.insert(request) expected_params = [] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_rest_unset_required_fields(): +def test_insert_rest_unset_required_fields(): transport = transports.VpnTunnelsRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get._get_unset_required_fields({}) + unset_fields = transport.insert._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) + set(("requestId",)) & set( ( "project", "region", - "vpnTunnel", + "vpnTunnelResource", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_rest_interceptors(null_interceptor): +def test_insert_rest_interceptors(null_interceptor): transport = transports.VpnTunnelsRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -1370,9 +2021,9 @@ def test_get_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.VpnTunnelsRestInterceptor, "post_get" + transports.VpnTunnelsRestInterceptor, "post_insert" ) as post, mock.patch.object( - transports.VpnTunnelsRestInterceptor, "pre_get" + transports.VpnTunnelsRestInterceptor, "pre_insert" ) as pre: pre.assert_not_called() post.assert_not_called() @@ -1387,17 +2038,17 @@ def test_get_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = compute.VpnTunnel.to_json(compute.VpnTunnel()) + req.return_value._content = compute.Operation.to_json(compute.Operation()) - request = compute.GetVpnTunnelRequest() + request = compute.InsertVpnTunnelRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnTunnel + post.return_value = compute.Operation - client.get( + client.insert( request, metadata=[ ("key", "val"), @@ -1409,8 +2060,8 @@ def test_get_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_rest_bad_request( - transport: str = "rest", request_type=compute.GetVpnTunnelRequest +def test_insert_rest_bad_request( + transport: str = "rest", request_type=compute.InsertVpnTunnelRequest ): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), @@ -1418,7 +2069,37 @@ def test_get_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"project": "sample1", "region": "sample2", "vpn_tunnel": "sample3"} + request_init = {"project": "sample1", "region": "sample2"} + request_init["vpn_tunnel_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "description": "description_value", + "detailed_status": "detailed_status_value", + "id": 205, + "ike_version": 1182, + "kind": "kind_value", + "local_traffic_selector": [ + "local_traffic_selector_value_1", + "local_traffic_selector_value_2", + ], + "name": "name_value", + "peer_external_gateway": "peer_external_gateway_value", + "peer_external_gateway_interface": 3279, + "peer_gcp_gateway": "peer_gcp_gateway_value", + "peer_ip": "peer_ip_value", + "region": "region_value", + "remote_traffic_selector": [ + "remote_traffic_selector_value_1", + "remote_traffic_selector_value_2", + ], + "router": "router_value", + "self_link": "self_link_value", + "shared_secret": "shared_secret_value", + "shared_secret_hash": "shared_secret_hash_value", + "status": "status_value", + "target_vpn_gateway": "target_vpn_gateway_value", + "vpn_gateway": "vpn_gateway_value", + "vpn_gateway_interface": 2229, + } request = request_type(request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -1430,10 +2111,10 @@ def test_get_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get(request) + client.insert(request) -def test_get_rest_flattened(): +def test_insert_rest_flattened(): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -1442,45 +2123,43 @@ def test_get_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = compute.VpnTunnel() + return_value = compute.Operation() # get arguments that satisfy an http rule for this method - sample_request = { - "project": "sample1", - "region": "sample2", - "vpn_tunnel": "sample3", - } + sample_request = {"project": "sample1", "region": "sample2"} # get truthy value for each flattened field mock_args = dict( project="project_value", region="region_value", - vpn_tunnel="vpn_tunnel_value", + vpn_tunnel_resource=compute.VpnTunnel( + creation_timestamp="creation_timestamp_value" + ), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = compute.VpnTunnel.to_json(return_value) + json_return_value = compute.Operation.to_json(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get(**mock_args) + client.insert(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/compute/v1/projects/{project}/regions/{region}/vpnTunnels/{vpn_tunnel}" + "%s/compute/v1/projects/{project}/regions/{region}/vpnTunnels" % client.transport._host, args[1], ) -def test_get_rest_flattened_error(transport: str = "rest"): +def test_insert_rest_flattened_error(transport: str = "rest"): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -1489,15 +2168,17 @@ def test_get_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get( - compute.GetVpnTunnelRequest(), + client.insert( + compute.InsertVpnTunnelRequest(), project="project_value", region="region_value", - vpn_tunnel="vpn_tunnel_value", + vpn_tunnel_resource=compute.VpnTunnel( + creation_timestamp="creation_timestamp_value" + ), ) -def test_get_rest_error(): +def test_insert_rest_error(): client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -1588,28 +2269,6 @@ def test_insert_unary_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.Operation) - assert response.client_operation_id == "client_operation_id_value" - assert response.creation_timestamp == "creation_timestamp_value" - assert response.description == "description_value" - assert response.end_time == "end_time_value" - assert response.http_error_message == "http_error_message_value" - assert response.http_error_status_code == 2374 - assert response.id == 205 - assert response.insert_time == "insert_time_value" - assert response.kind == "kind_value" - assert response.name == "name_value" - assert response.operation_group_id == "operation_group_id_value" - assert response.operation_type == "operation_type_value" - assert response.progress == 885 - assert response.region == "region_value" - assert response.self_link == "self_link_value" - assert response.start_time == "start_time_value" - assert response.status == compute.Operation.Status.DONE - assert response.status_message == "status_message_value" - assert response.target_id == 947 - assert response.target_link == "target_link_value" - assert response.user == "user_value" - assert response.zone == "zone_value" def test_insert_unary_rest_required_fields(request_type=compute.InsertVpnTunnelRequest): @@ -2305,6 +2964,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = VpnTunnelsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_vpn_tunnels_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -2340,6 +3012,14 @@ def test_vpn_tunnels_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_vpn_tunnels_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_zone_operations.py b/tests/unit/gapic/compute_v1/test_zone_operations.py index 62cffd7eb..8fc710f63 100644 --- a/tests/unit/gapic/compute_v1/test_zone_operations.py +++ b/tests/unit/gapic/compute_v1/test_zone_operations.py @@ -1860,6 +1860,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ZoneOperationsClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_zone_operations_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1894,6 +1907,14 @@ def test_zone_operations_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_zone_operations_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file diff --git a/tests/unit/gapic/compute_v1/test_zones.py b/tests/unit/gapic/compute_v1/test_zones.py index 8d3635354..dc6c7ee97 100644 --- a/tests/unit/gapic/compute_v1/test_zones.py +++ b/tests/unit/gapic/compute_v1/test_zones.py @@ -1190,6 +1190,19 @@ def test_transport_adc(transport_class): adc.assert_called_once() +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = ZonesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + def test_zones_base_transport_error(): # Passing both a credentials object and credentials_file should raise an error with pytest.raises(core_exceptions.DuplicateCredentialArgs): @@ -1222,6 +1235,14 @@ def test_zones_base_transport(): with pytest.raises(NotImplementedError): transport.close() + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + def test_zones_base_transport_with_credentials_file(): # Instantiate the base transport with a credentials file